您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

排序对象属性和JSON.stringify

排序对象属性和JSON.stringify

更简单,现代且当前受浏览器支持方法如下:

JSON.stringify(sortMyObj, Object.keys(sortMyObj).sort());

但是,此方法删除所有未引用的嵌套对象,并且不适用于数组内的对象。如果您想要类似以下输出内容,则也将希望使排序对象变平:

{"a":{"h":4,"z":3},"b":2,"c":1}

您可以这样做:

var flattenObject = function(ob) {
    var toReturn = {};

    for (var i in ob) {
        if (!ob.hasOwnProperty(i)) continue;

        if ((typeof ob[i]) == 'object') {
            var flatObject = flattenObject(ob[i]);
            for (var x in flatObject) {
                if (!flatObject.hasOwnProperty(x)) continue;

                toReturn[i + '.' + x] = flatObject[x];
            }
        } else {
            toReturn[i] = ob[i];
        }
    }
    return toReturn;
};

JSON.stringify(sortMyObj, Object.keys(flattenObject(sortMyObj)).sort());

要通过编程进行一些调整,您需要将对象的属性名称放入一个数组中,然后按字母顺序对数组进行排序,然后依次遍历该数组(顺序正确),然后从对象中选择每个值那个命令。同时也检查“ hasOwnProperty”,因此您绝对只有对象自己的属性。这是一个例子:

var obj = {"a":1,"b":2,"c":3};

function iterateObjectAlphabetically(obj, callback) {
    var arr = [],
        i;

    for (i in obj) {
        if (obj.hasOwnProperty(i)) {
            arr.push(i);
        }
    }

    arr.sort();

    for (i = 0; i < arr.length; i++) {
        var key = obj[arr[i]];
        //console.log( obj[arr[i]] ); //here is the sorted value
        //do what you want with the object property
        if (callback) {
            // callback returns arguments for value, key and original object
            callback(obj[arr[i]], arr[i], obj);
        }
    }
}

iterateObjectAlphabetically(obj, function(val, key, obj) {
    //do something here
});

同样,这应确保您按字母顺序进行遍历。

最后,以最简单的方式进行扩展,该库将递归地允许您对传递给它的任何JSON进行排序:https : //www.npmjs.com/package/json-stable- stringify

var stringify = require('json-stable-stringify');
var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 };
console.log(stringify(obj));

输出

{"a":3,"b":[{"x":4,"y":5,"z":6},7],"c":8}
其他 2022/1/1 18:14:21 有367人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶