我试图对照一个数组检查一个数组中的值,并返回一个只包含匹配项的过滤后的数组。
因此,例如,我可以执行此操作以进行布尔检查以查看是否存在匹配项:
let targetArray = [{"_id" : "111", city: "Los Angeles"}, {"_id" : "222", city: "New York", }, {"_id" : "333", city: "Seattle"}]
let filterValues = ["111", "333"];
let matchCheck = filterValues.every(el => targetArray.some(({_id}) => el == _id))
console.log(matchCheck) // returns true in this case
由于存在匹配项,因此返回true
。
但是我如何从原始targetArray返回仅包含两个行进对象的数组?换句话说,看起来像这样的数组:
[{"_id" : "111", city: "Los Angeles"}, {"_id" : "333", city: "Seattle"}]
答案 0 :(得分:1)
但是我如何从原始targetArray返回仅包含两个行进对象的数组?
使用.filter
+ .some
:
targetArray.filter(({_id}) => filterValues.some(el => el === _id));
您也可以使用Set
而不是数组来避免.some
:
let filterValues = new Set(["111", "333"]);
targetArray.filter(({_id}) => filterValues.has(_id));
答案 1 :(得分:1)
尝试一下。
let targetArray = [{"_id" : "111", city: "Los Angeles"}, {"_id" : "222", city: "New York", }, {"_id" : "333", city: "Seattle"}]
let filterValues = ["111", "333"];
let op = targetArray.filter(e => {
return filterValues.includes(e._id)
})
console.log(op)
答案 2 :(得分:1)
使用Set
作为filter()的this
自变量
let targetArray = [{"_id" : "111", city: "Los Angeles"}, {"_id" : "222", city: "New York", }, {"_id" : "333", city: "Seattle"}]
let filterValues = ["111", "333"];
let filtered = targetArray.filter(function({_id}){ return this.has(_id)}, new Set(filterValues))
console.log(filtered)
答案 3 :(得分:0)
最大程度地利用Set
,您可以在集合上使用闭包并获取对象,将集合的值与集合分开,然后返回结果。
let targetArray = [{ _id: "111", city: "Los Angeles" }, { _id: "222", city: "New York" }, { _id: "333", city: "Seattle" }],
filterValues = ["111", "333"],
filtered = targetArray.filter(
(s => o => s.has(o._id))
(new Set(filterValues))
);
console.log(filtered);