更簡單的,現代的和目前的瀏覽器支持的方法很簡單:
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}
請給你試圖字符串化(或者JSON輸出或JS對象常量)中的對象 – Bojangles 2013-04-23 10:59:27
對象鍵不是對象的實例保證有一個固定的訂單。這是設計。 – Passerby 2013-04-23 11:07:09
我能想到的唯一跨瀏覽器方式是修改JSON.stringify實現。 – Dogbert 2013-04-23 11:10:19