Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据其他数组中的索引对对象数组进行排序_Javascript_Arrays_Sorting_Lodash - Fatal编程技术网

Javascript 根据其他数组中的索引对对象数组进行排序

Javascript 根据其他数组中的索引对对象数组进行排序,javascript,arrays,sorting,lodash,Javascript,Arrays,Sorting,Lodash,我有以下唯一ID数组: idArray = ["56f4cf96dd2ca7275feaf802", "56f4cf96dd2ca7275feaf7b7", "56f4cf96dd2ca7275feaf805", "56f4cf96dd2ca7275feaf7ac"] 我还有另一组对象: stories = [{"title": Story2, id = "56f4cf96dd2ca7275feaf7b7"}, {"title": Story4, id = "56f4cf96dd2ca7275

我有以下唯一ID数组:

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()?我认为这样做没有什么不好的。