【发布时间】:2021-05-03 23:01:28
【问题描述】:
我需要用对象填充 id 数组。换句话说,我有。 id 数组:
var orderArray = ["5ace454a2b22e17597d0e694", "5acde7c0f7d2520e3b205971", "5ad2086bf05ad342dc723ea1"]
还有对象数组:
var objectsArray = [ { _id: 5acde7c0f7d2520e3b205971,
name: 'Dinner',
restaurant: 5a68d8ea17d9e4308e6400c3,
created: 2018-04-11T10:47:28.957Z,
status: true,
products: [ [Object] ] },
{ _id: 5ace454a2b22e17597d0e694,
name: 'Test',
restaurant: 5a68d8ea17d9e4308e6400c3,
image:
{ _id: 5ad23ed177bcd07303f62899,
filename: 'rJKCR2k2f-1523728081111.jpeg',
destination: 'images',
binded: true },
created: 2018-04-11T17:26:34.186Z,
status: false,
products: [ [Object], [Object] ] },
{ _id: 5ad2086bf05ad342dc723ea1,
name: 'Test',
restaurant: 5a68d8ea17d9e4308e6400c3,
image: null,
created: 2018-04-14T13:55:55.449Z,
status: true,
products: [] } ]
您可以根据 ID 对对象数组进行排序...或者将 ID 数组映射到对象数组。可能我更喜欢第二种选择。 但是我的方法是行不通的
orderArray.map(id => objectsArray.filter(obj => obj._id == id))
结果应该是:objectsArray按照orderArray中元素的顺序排序
解决方案:我几天前已经打开了这个问题:Merging 2 arrays with different value types
在这里我有同样的问题。 orderArray 是对象数组(不是字符串),因此为了使其工作,我需要应用我之前找到的解决方案(Array.filter 和 Array.find 函数都运行良好): 但以我的方式,它只有在以下情况下才会起作用:
order_array.map(String).map(e => objectsArray.find(a => a._id == e))
//as well as
order_array.map(String).map(e => objectsArray.filter(a => a._id == e))
【问题讨论】:
-
你到底在寻找什么输出?
-
使用
find而不是filter,否则你会得到一个额外的嵌套数组。 -
@tricot no 两者都可以正常工作..这里的问题超出了...查看解决方案和引用的帖子
-
@tricot 虽然如果你知道引用帖子的答案 - 我很想听听
标签: javascript arrays