将内容从一个数组匹配到另一个数组并返回过滤后的数组

时间:2018-11-30 18:42:49

标签: javascript arrays

我试图对照一个数组检查一个数组中的值,并返回一个只包含匹配项的过滤后的数组。

因此,例如,我可以执行此操作以进行布尔检查以查看是否存在匹配项:

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"}]

4 个答案:

答案 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);