如何使用另一个数组按名称对对象属性进行排序?
var json = '{"b":90,"c":42, "a":34}';
var obj = JSON.parse(json);
var sorting = ["a","b","c"];
我想订购 obj 属性,就像排序数组一样
谢谢
再见
答案 0 :(得分:0)
var sorting = Object.keys(obj).sort();
答案 1 :(得分:0)
未订购Javascript对象。所以,你实际上无法对它们进行排序。
答案 2 :(得分:0)
为什么不迭代数组,然后访问obj属性?
for ( var i = 0; i < sorting.length; ++i ) {
var current = obj[ sorting[ i ] ];
// other stuff here...
}
如果您不打算迭代obj,请解释您的实际需求。
答案 3 :(得分:0)
将对象转换为数组
var jsonArray = [];
$。each(myObj,function(i,n){ jsonArray.push(N); });
排序数组
var jsonArraySort = jsonArray.sort();
将数组转换为对象
var jsonSort = {}; for(var i = 0; i&lt; jsonArraySort.length; i ++){ jsonSort [i] = jsonArraySort [i]; }
答案 4 :(得分:0)
您可以尝试以下方式:
var sorted = []
for (i = 0; i < sorting.length; i++) {
if (json.hasOwnProperty(sorting[i])) {
sorted.push(json[sorting[i]);
}
}
/* sorted will equal [34, 90, 42] */
答案 5 :(得分:0)
根据定义,您无法订购对象的键
ECMAScript对象是无序属性集合 ES3 Specs
枚举属性的机制和顺序(第一个算法中的步骤6.a,第二个算法中的步骤7.a)未指定。
枚举期间可以删除要枚举的对象的属性。如果删除枚举期间尚未访问的属性,则不会访问该属性。如果在枚举期间将新属性添加到要枚举的对象,则无法保证在活动枚举中访问新添加的属性。在任何枚举中不得多次访问属性名称。 ES5 Specs
如果你想要一个由你的对象键组成的排序数组,你可以使用[Object.keys
] [4],得到它们的数组,然后你可以对它进行排序。
var obj = {b:90,c:42, a:34}
console.log (
Object.keys (obj).sort ()
) // ["a","b","c"]
如果您对包含键和值的排序数组感兴趣,可以执行以下操作。
var obj = {b: 90, c: 42, a: 34},
srt = Object.keys(obj).sort().map(function (prop) {
return {
key: prop,
value: obj[prop]
}
});
console.log(srt) //[{"key":"a","value":34},{"key":"b","value":90},{"key":"c","value":42}]