我有一个对象数组:
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}(这只是一个例子) 如何制作?
答案 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 的 find 和 filter 方法:
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));