按属性过滤对象数组

时间:2021-03-04 17:17:08

标签: javascript arrays object filter

我有一个对象数组:

const obj = [
        { name: 'Test', age: 25 },
        { name: 'App', age: 27 },
        { name: 'Const', age: 28 },
];

我还有另一个:

const value = [
        { surname: 'Test', age: 54 },
        { surname: 'Back', age: 54 },
        { surname: 'Front', age: 54 },
        { surname: 'Const', age: 54 },
        { surname: 'App', age: 54 },
];

现在,我想在第二个数组中只留下对象, 其中有 name === surname 和其他删除。 键必须不同,但其中的值必须相同。 例如:{name: "Test", age: 25} === {surname: "Test", age: 54}(这只是一个例子) 如何制作?

4 个答案:

答案 0 :(得分:1)

使用过滤器和一些:

const myArrayFiltered = obj.filter( el => {
  return value.some( f => {
    return f.surname === el.name;
  });
});

答案 1 :(得分:1)

您必须使用 filter 并查看第二个列表中是否有键。
并且不要忘记将 filter() 的结果重新分配给 value 列表,因为过滤器不会更改原始列表,而是返回一个新的、经过过滤的列表。

value = value.filter(oneVal => obj.find(o => o.name === oneVal.surname))

更多关于filter() here

答案 2 :(得分:1)

使用嵌入式 Javascript 的 findfilter 方法:

value.filter(k => 
   obj.find(v => v.name === k.surname)
)

这基本上是说“过滤 value 数组中符合此条件的所有值”。条件是“在 obj 中查找名称等于姓氏的值”。

答案 3 :(得分:1)

试试这个

const obj = [
  { name: 'Test', age: 25 },
  { name: 'App', age: 27 },
  { name: 'Const', age: 28 },
];

let value = [
  { surname: 'Test', age: 54 },
  { surname: 'Back', age: 54 },
  { surname: 'Front', age: 54 },
  { surname: 'Const', age: 54 },
  { surname: 'App', age: 54 },
];

const names = obj.map(el => el.name);

value = value.filter(el => names.includes(el.surname));

或者像这样:

const obj = [
  { name: 'Test', age: 25 },
  { name: 'App', age: 27 },
  { name: 'Const', age: 28 },
];

const names = obj.map(el => el.name);

const value = [
  { surname: 'Test', age: 54 },
  { surname: 'Back', age: 54 },
  { surname: 'Front', age: 54 },
  { surname: 'Const', age: 54 },
  { surname: 'App', age: 54 },
].filter(el => names.includes(el.surname));
相关问题