我想知道如何重新排序一个数组,以便每个对象都在它自己的id – 1的索引处.
//Lets say we have an array like so var unorderedArray=[{Id:2,Name:"Bob"},{Id:1,Name:"Julian"},{Id:3,Name:"Jeff"}]
我能写什么样的功能才能得到:
var orderedArray=[{Id:1,{Id:2,Name:"Jeff"}]
到目前为止,我已经尝试了这个,但它不起作用:
for(let i = 0;i<unorderedArray.length;i++){ correctlyOrderedArray[unorderedArray[i].Id]=unorderedArray[i]; }
P.S!不能保证最低Id为1并且最低和最高Id之间没有间隙,例如2,10,5,3等.
解决方法
您可以使用
Array#reduce创建一个数组,其中的项目根据其ID放置.但是,如果id不连续,你将获得一个稀疏数组(一个带有孔的数组 – undefineds).
var unorderedArray=[{Id:2,Name:"Jeff"},{Id:10,Name:"Tom"}]; var orderedArray = unorderedArray.reduce(function(arr,item) { arr[item.Id - 1] = item; return arr; },[]); console.log(orderedArray); // since the Tom's id is 10,you'll get 6 undefined items between Tom and Jeff