Javascript 根据其他数组中的索引对对象数组进行排序
我有以下唯一ID数组:Javascript 根据其他数组中的索引对对象数组进行排序,javascript,arrays,sorting,lodash,Javascript,Arrays,Sorting,Lodash,我有以下唯一ID数组: idArray = ["56f4cf96dd2ca7275feaf802", "56f4cf96dd2ca7275feaf7b7", "56f4cf96dd2ca7275feaf805", "56f4cf96dd2ca7275feaf7ac"] 我还有另一组对象: stories = [{"title": Story2, id = "56f4cf96dd2ca7275feaf7b7"}, {"title": Story4, id = "56f4cf96dd2ca7275
idArray = ["56f4cf96dd2ca7275feaf802",
"56f4cf96dd2ca7275feaf7b7",
"56f4cf96dd2ca7275feaf805",
"56f4cf96dd2ca7275feaf7ac"]
我还有另一组对象:
stories = [{"title": Story2, id = "56f4cf96dd2ca7275feaf7b7"},
{"title": Story4, id = "56f4cf96dd2ca7275feaf7ac"},
{"title": Story1, id = "56f4cf96dd2ca7275feaf802"},
{"title": Story3, id = "56f4cf96dd2ca7275feaf805"}]
如何根据第一个数组的索引对第二个数组进行排序?最好使用lodash,因为阵列可以稍微增大
到目前为止,我已经从第一个数组中获得了以下索引:
var sortArray = _.toPairs(idArray)
[ [ '0', 56f4cf96dd2ca7275feaf802 ],
[ '1', 56f4cf96dd2ca7275feaf7b7 ],
[ '2', 56f4cf96dd2ca7275feaf805 ],
[ '3', 56f4cf96dd2ca7275feaf7ac ] ]
尝试u.map()和u.sortBy()的不同组合时,我似乎无法正确获得我想要的结果,即:
desiredResult = [{"title": Story1, id = "56f4cf96dd2ca7275feaf802"},
{"title": Story2, id = "56f4cf96dd2ca7275feaf7b7"},
{"title": Story3, id = "56f4cf96dd2ca7275feaf805"},
{"title": Story4, id = "56f4cf96dd2ca7275feaf7ac"}]
试试这个
var idsToIndexes = {};
for (var i = 0; i < idArray.length; i++)
idsToIndexes[idArray[i]] = i;
stories.sort(function(a, b){return idsToIndexes[a.id] - idsToIndexes[b.id];});
var idstoindex={};
对于(变量i=0;i
使用Array.sort()
var stories=[{“title”:“Story2”,id:“56f4cf96dd2ca7275feaf7b7”},
{“title”:“Story4”,id:“56f4cf96dd2ca7275feaf7ac”},
{“title”:“Story1”,id:“56f4cf96dd2ca7275feaf802”},
{“title:'Story3',id:'56f4cf96dd2ca7275feaf805}];
var idArray=[“56f4cf96dd2ca7275feaf802”,
“56f4cf96dd2ca7275feaf7b7”,
“56f4cf96dd2ca7275feaf805”,
“56f4cf96dd2ca7275feaf7ac”];
var ordered=stories.sort(函数(a,b){
返回idArray.indexOf(a.id)-idArray.indexOf(b.id);
});
ordered.forEach(元素=>{console.log(元素)})代码>我认为排序解决方案是非常无效的,尤其是因为您希望阵列以后会变得更大。排序“充其量”是一个O(2n)操作,而每个循环有两个indexOf操作,另一个是O(2n^2)。我提出了以下方法,在大型数组中它的性能将优于sort方法
var stories=[{“title”:“Story2”,id:“56f4cf96dd2ca7275feaf7b7”},
{“title”:“Story4”,id:“56f4cf96dd2ca7275feaf7ac”},
{“title”:“Story1”,id:“56f4cf96dd2ca7275feaf802”},
{“title”:“Story3”,id:“56f4cf96dd2ca7275feaf805”},
idArray=[“56f4cf96dd2ca7275feaf802”,
“56f4cf96dd2ca7275feaf7b7”,
“56f4cf96dd2ca7275feaf805”,
“56f4cf96dd2ca7275feaf7ac”],
ordered=idArray.reduce((p,c)=>p.concat(stories.find(f=>f.id==c)),[]);
控制台日志(已订购)代码>正是我的想法。你打败了我。。。来,拿把小提琴:;)谢谢你,回答得很好。可以执行“return-idArray.indexOf(b.id)-dArray.indexOf(a.id)”来颠倒顺序吗?还是应该对生成的数组使用reverse()?我认为这样做没有什么不好的。