高性能 – 将对象转换为数组,同时对键进行sorting

我有以下的对象:

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] 

什么是最快的方法来实现呢?

顺便说一句,它用在我的node.js服务器而不是浏览器客户端。

我不认为有任何操纵会带来真正的性能收益。
另外,由于JavaScript是以“引用”的方式工作的,因此真正的命中是创build一个数组并对其进行sorting,因为您并不真正深度复制这些对象。 它不应该是真正的性能打击,因为在你的例子中,数组很小。

在这种情况下,首选清除伪代码的代码:

 var arr = []; for (var o in myObj){ arr.push(myObj[o]); } arr.sort(function(a,b){ return a.id-b.id; }); 

只需对键进行sorting:

 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>'); 

首先你的JSON不是有效的JSON,Use和"" 。 要实现你的任务使用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)); 

使用lodash:

 var sortedById = _.sortBy(_.values(myObj), 'id');