我有以下两个数组:
主要:
[
{ id: "1"},
{ id: "2"},
{ id: "3"}
]
已过滤:
[
{ id: "80", link_id: "1"},
{ id: "50", link_id: null},
{ id: "67", link_id: "3"}
]
我需要获取main
项,其ID为filtered
中包含的项,其属性为:link_id
,我尝试过:
main.filter(x => filtered.includes(x.id));
问题在于,该函数将返回null,并且这也不允许我检查link_id
是否为空
var main = [{
id: "1"
},
{
id: "2"
},
{
id: "3"
}
],
filtered = [{
id: "80",
link_id: "1"
},
{
id: "50",
link_id: null
},
{
id: "67",
link_id: "3"
}
],
result = main.filter(x =>
filtered.includes(x.id)
);
console.log(result)
答案 0 :(得分:9)
尝试使用some()
方法
var main = [
{ id: "1"},
{ id: "2"},
{ id: "3"}
]
var filtered = [
{ id: "80", link_id: "1"},
{ id: "50", link_id: null},
{ id: "67", link_id: "3"}
]
console.log(main.filter(x => filtered.some(item => item.link_id === x.id) ));
答案 1 :(得分:0)
您很亲密,基本上您需要检入filtered
数组的每个项目。
includes
对于普通对象来说更像documentation states.
检查下面的代码段,可以使用findIndex
,find
或some
来获取元素是否存在于过滤后的数组中。
const main = [{
id: "1"
},
{
id: "2"
},
{
id: "3"
}
]
const filtered = [{
id: "80",
link_id: "1"
},
{
id: "50",
link_id: null
},
{
id: "67",
link_id: "3"
}
]
const resultFindIndex = main.filter(item => -1 !== filtered.findIndex(filteredItem => item.id === filteredItem.link_id))
const resultFind = main.filter(item => filtered.find(filteredItem => item.id === filteredItem.link_id))
const resultSome = main.filter(item => filtered.some(filteredItem => item.id === filteredItem.link_id))
console.log(resultFindIndex)
console.log(resultFind)
console.log(resultSome)