我有2个阵列。
1)一系列ID。恩。 item_ids: [1, 4, 12]
2)一个对象数组
离。
items: [
0: {id: 1...},
1: {id: 5...},
2: {id: 12...}
]
我需要构建一个NEW数组,该数组由第二个数组items
中的对象组成,其ID在第一个数组中找到。
在这种情况下,它将是一个由对象1和1组成的数组。因为他们的ID存在于第一个数组中
以下是我目前正在尝试的内容,但它会为所有三个对象返回undefined
(在我使用它的示例中有3个)
let new_avails = avails.avails_to_update.map(id => {
this.state.availabilities.availabilities.find(function(a) {
return a.id == id
})
}, this)
avails_to_update
== id' s
this.state.availabilities.availabilities
==对象数组
答案 0 :(得分:3)
函数map
将创建一个与原始数组长度相同的新数组。
使用函数filter
代替函数includes
来完成您的要求。
var item_ids= [1, 4, 12],
items= [{id: 1},{id: 5},{id: 12}],
filtered = items.filter(item => (item_ids.includes(item.id)));
console.log(filtered)
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
由于the nature of Sets
:以下解决方案比在time complex
内嵌套Array.prototype.includes()
少Array.prototype.filter()
。
有关详情,请参阅和Set.has()
。
// Input.
const items = [{id: 1},{id: 5},{id: 12}]
const ids = [1, 4, 12]
// Filter.
const filter = (x, y) => {
const s = new Set(y)
return x.filter(({id}) => s.has(id))
}
// Output.
const output = filter(items, ids)
// Proof.
console.log(output)