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

标签 javascript arrays sorting lodash

我有以下唯一 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 ] ]

尝试 _.map() 和 _.sortBy() 的不同组合,我似乎无法正确获得我想要的结果:

desiredResult = [{"title": Story1, id = "56f4cf96dd2ca7275feaf802"},
          {"title": Story2, id = "56f4cf96dd2ca7275feaf7b7"},
          {"title": Story3, id = "56f4cf96dd2ca7275feaf805"},
          {"title": Story4, id = "56f4cf96dd2ca7275feaf7ac"}]

最佳答案

我认为排序解决方案非常低效,尤其是因为您希望数组稍后会变大。排序“充其量”是一个 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)

关于javascript - 根据其他数组中的索引对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37534517/

相关文章:

python - 通过元组键列表分配矩阵元素

javascript - ui-router 中嵌套 ui-view 的默认状态

javascript - 防止事件助手消失

arrays - plpgsql 函数在数组中搜索和移动索引

javascript - 数组过滤器更改主数组

algorithm - 冒泡排序为什么叫冒泡排序?

javascript - 在xpath中表达文本框的值?

Javascript 数组包含键是字符串或字符串数​​组的位置

c - 了解 MIPS 汇编代码段

python - 根据数组中的唯一值拆分数组