www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit 8ff108cbdf0d3f8ee597ce6494afdcaddbca7791
parent 673168ea7b92531971d83bdc7e9ce49e979f2aec
Author: Dan Stillman <dstillman@zotero.org>
Date:   Sun, 31 May 2015 17:10:42 -0400

Merge pull request #745 from Juris-M/simpler-stable-stringify

Simplification of stableStringify()
Diffstat:
Mtest/content/support.js | 43+++++++++++--------------------------------
1 file changed, 11 insertions(+), 32 deletions(-)

diff --git a/test/content/support.js b/test/content/support.js @@ -202,39 +202,18 @@ function resetDB() { * Equivalent to JSON.stringify, except that object properties are stringified * in a sorted order. */ -function stableStringify(obj, level, label) { - if (!level) level = 0; - let indent = '\t'.repeat(level); - - if (label) label = JSON.stringify('' + label) + ': '; - else label = ''; - - if (typeof obj == 'function' || obj === undefined) return null; - - if (typeof obj != 'object' || obj === null) return indent + label + JSON.stringify(obj); - - if (Array.isArray(obj)) { - let str = indent + label + '['; - for (let i=0; i<obj.length; i++) { - let json = stableStringify(obj[i], level + 1); - if (json === null) json = indent + '\tnull'; // function - str += '\n' + json + (i < obj.length-1 ? ',' : ''); +function stableStringify(obj) { + return JSON.stringify(obj, function(k, v) { + if (v && typeof v == "object" && !Array.isArray(v)) { + let o = {}, + keys = Object.keys(v).sort(); + for (let i = 0; i < keys.length; i++) { + o[keys[i]] = v[keys[i]]; + } + return o; } - return str + (obj.length ? '\n' + indent : '') + ']'; - } - - let keys = Object.keys(obj).sort(), - empty = true, - str = indent + label + '{'; - for (let i=0; i<keys.length; i++) { - let json = stableStringify(obj[keys[i]], level + 1, keys[i]); - if (json === null) continue; // function - - empty = false; - str += '\n' + json + (i < keys.length-1 ? ',' : ''); - } - - return str + (!empty ? '\n' + indent : '') + '}'; + return v; + }, "\t"); } /**