【问题标题】:How to filter array of object with array of string如何用字符串数组过滤对象数组
【发布时间】:2021-04-09 19:25:53
【问题描述】:

假设我有一个对象数组 arr1 arr1 = [{name: "name1",id: 1},{name: "name2",id: 1},{name: "name3",id: 4},{name: "name3",id: 3},{name: "name1",id: 5}]

我想用数组arr2 =["name1","name3"]过滤它

我尝试使用 filter 然后 .some。但没有得到正确的数据。

必填arr3 = [{name: "name1",id: 1},{name: "name3",id: 4},{name: "name3",id: 3},{name: "name1",id: 5}]

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

试试这个:

const res = arr1.filter(item => arr2.includes(item.name));

【讨论】:

  • 我觉得应该是.includes(item.name)
【解决方案2】:

首先,我将从arr2 创建一个Set

然后我将使用filter 方法仅选择集合中存在的元素。

arr1 = [
  { name: 'name1', id: 1 },
  { name: 'name2', id: 1 },
  { name: 'name3', id: 4 },
  { name: 'name3', id: 3 },
  { name: 'name1', id: 5 },
];

arr2 = ['name1', 'name3'];

arr3 = [
  { name: 'name1', id: 1 },
  { name: 'name3', id: 4 },
  { name: 'name3', id: 3 },
  { name: 'name1', id: 5 },
];

const s = new Set(arr2);

console.log(arr1.filter(a => s.has(a.name)))

【讨论】:

    【解决方案3】:

    您可以使用 Array#filterSet 以获得更好的性能。

    const arr1 = [{name: "name1",id: 1},{name: "name2",id: 1},{name: "name3",id: 4},{name: "name3",id: 3},{name: "name1",id: 5}];
    let set = new Set(["name1","name3"]);
    let res = arr1.filter(({name})=>set.has(name));
    console.log(res);

    【讨论】:

      猜你喜欢
      • 2019-04-04
      • 1970-01-01
      • 2015-03-24
      • 2022-01-13
      • 2020-08-15
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多