我有以下对象:
var myObj = {
"4":{//The key is a number String.
id:4,name:aaaa
}
"1":{
id:1,name:a
}
"2":{
id:2,name:aa
}
"3":{
id:3,name:aaa
}
}
我想将其转换为以下数组:
var myArr = [{id:1,name:a},{id:2,name:aa},{id:3,name:aaa},{id:4,name:aaaa}]
我的问题更多的是语法问题,可以使用Javascript完成以下伪代码:
1. Create an array with the size of Object.keys(myObj).length.
2. For each key in myObj
2.1 set myArr[key] = myObj[key]
实现这一目标的最快方法是什么?
BTW,它在我的node.js服务器中使用,而不是浏览器客户端。
答案 0 :(得分:2)
我认为任何操纵都不会带来真正的性能提升。
此外,由于JavaScript在“引用 - ”方法上工作,这里真正的目标是创建一个数组并对其进行排序,因为您并没有真正深度复制对象。
它不应该是真正的性能命中,因为在你的例子中数组很小。
在这种情况下,更喜欢清晰的代码而不是psudo-performant代码:
var arr = [];
for (var o in myObj){
arr.push(myObj[o]);
}
arr.sort(function(a,b){
return a.id-b.id;
});
答案 1 :(得分:1)
首先,您的JSON不是有效的JSON,请使用,
和""
。要完成您的任务,请使用Array.prototype.map
var myObj = {
"4":{//The key is a number String.
id:4,name:"aaaa"
},
"1":{
id:1,name:"a"
},
"2":{
id:2,name:"aa"
},
"3":{
id:3,name:"aaa"
}
};
var arr = Object.keys(myObj).sort(function(a,b){return +a - +b;}).map(function(x){ return myObj[x]; }); // ES6
document.write(JSON.stringify(arr));

对于ECMAScript6使用
var arr = Object.keys(myObj).sort().map( x => myObj[x]);
答案 2 :(得分:1)
只需按键排序:
var myObj = { "4": { id: 4, name: 'aaaa' }, "1": { id: 1, name: 'a' }, "2": { id: 2, name: 'aa' }, "3": { id: 3, name: 'aaa' } },
result = Object.keys(myObj).map(Number).sort(function (a, b) {
return a - b;
}).map(function (k) {
return myObj[k];
});
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
&#13;
答案 3 :(得分:1)
使用lodash:
var sortedById = _.sortBy(_.values(myObj), 'id');