javascript - 使用 Array.filter 比较两个数组并根据共同值推送到新数组

标签 javascript arrays ecmascript-6

我正在尝试使用array.filter()来比较两个数组,并根据某个属性(id)与它们不具有的值分离出两个数组共有的值没有共同点。我想要推送到新数组 (recordsToUpdate) 的通用 ID。我想将 arr2 中的剩余元素推送到新数组 (recordsToInsert)。

我尝试过的方法不起作用。我怎样才能重新修改它以获得我想要的结果? - (在此示例中,应该是一个包含 1 个公共(public)元素 {id: 3} 的数组,以及另一个包含 arr2 中剩余元素的数组):

const arr1 = [{id: 1}, {id: 2}, {id: 3}];
const arr2 = [{id: 3}, {id: 4}, {id: 5}];

let recordsToUpdate = [];
let recordsToInsert = [];

recordsToUpdate = arr1.filter(e => (arr1.id === arr2.id));
recordsToInsert = ?

console.log('recordsToUpdate: ', recordsToUpdate);
console.log('recordsToInsert: ', recordsToInsert);

期望的结果应该是:

recordsToUpdate = [{id: 3}];
recordsToInsert = [{id: 4}, {id: 5}];

最佳答案

试试这个,它使用 Array.prototype.find测试 arr2 中是否存在具有给定 id 的对象:

const arr1 = [{id: 1}, {id: 2}, {id: 3}];
const arr2 = [{id: 3}, {id: 4}, {id: 5}];

const recordsToUpdate = arr1.filter(e => arr2.find(obj => obj.id === e.id) !== undefined);
const recordsToInsert = arr1.filter(e => arr2.find(obj => obj.id === e.id) === undefined);

console.log('recordsToUpdate: ', recordsToUpdate);
console.log('recordsToInsert: ', recordsToInsert);

关于javascript - 使用 Array.filter 比较两个数组并根据共同值推送到新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59887244/

相关文章:

java - BufferedReader 和 Stream Line Java 8

javascript - 将 Promise 用于 onload 和 onerror 后返回状态值

javascript - 如何使用 React es6 处理多个受控输入?

javascript - Angular 解析/评估/执行由第 3 方 JS 加载到指令模板中的 JS

javascript - 如何更改 promise 内外部变量的值?

javascript - NodeIterator 与 Xpath 在 Javascript 中进行 DOM 迭代/查找

ios - 在 View 之间传递数组值 [swift 3] [iOS]

javascript - 以对象格式设置 css 时使用 $(this) 和数据 attr

arrays - 这个用于向数组添加元素的 bash 脚本语法有什么问题?

javascript - 通过 es6 脚本创建 Web 表单