我有以下唯一ID数组:
>>> test("--van")
van get_all None
>>> test("--car --id 123")
car id 123
>>> test("--model_no 55 --van")
van model_no 55
>>> test("--car --id") #invalid because there is no request value
usage: test.py [-h] (--car | --van)
[--color REQUEST | --id REQUEST | --model_no REQUEST]
test.py: error: argument --id: expected one argument
我有另一个对象数组:
idArray = ["56f4cf96dd2ca7275feaf802",
"56f4cf96dd2ca7275feaf7b7",
"56f4cf96dd2ca7275feaf805",
"56f4cf96dd2ca7275feaf7ac"]
如何根据第一个数组的索引对第二个数组进行排序?最好使用lodash,因为阵列可以增长一点。
到目前为止,我有以下内容从第一个数组中获取索引:
stories = [{"title": Story2, id = "56f4cf96dd2ca7275feaf7b7"},
{"title": Story4, id = "56f4cf96dd2ca7275feaf7ac"},
{"title": Story1, id = "56f4cf96dd2ca7275feaf802"},
{"title": Story3, id = "56f4cf96dd2ca7275feaf805"}]
尝试_.map()和_.sortBy()的不同组合我似乎无法正确获得我想要的结果:
var sortArray = _.toPairs(idArray)
[ [ '0', 56f4cf96dd2ca7275feaf802 ],
[ '1', 56f4cf96dd2ca7275feaf7b7 ],
[ '2', 56f4cf96dd2ca7275feaf805 ],
[ '3', 56f4cf96dd2ca7275feaf7ac ] ]
答案 0 :(得分:3)
使用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(function(a, b){
return idArray.indexOf(a.id) - idArray.indexOf(b.id);
});
ordered.forEach( element =>{ console.log(element) });

答案 1 :(得分:3)
我认为排序解决方案非常无效,特别是因为您希望数组稍后会变大。最好排序""一个O(2n)操作,而你每个循环有两个indexOf操作另一个O(2n ^ 2)。我提出以下内容,它将胜过大数组中的排序方法。
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)) ,[]);
console.log(ordered);

仅O(n ^ 2)
答案 2 :(得分:1)
试试这个
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];});