javascript - 如何比较两个数组并返回差异? (双向工作?)

标签 javascript lodash

所以我希望在普通的 ES6 JS 中实现这一点。请不要使用 jQuery! (Lodash 是可以接受的!)

基本上我有 2 个数组,1 个包含对象,1 个包含 ID。

const old = [
  {
    id: 1,
    name: 'object_1',
  },
  {
    id: 2,
    name: 'object_2',
  },
];

const newIds = [1, 2, 3];

我目前对这个问题的解决方案如图所示;

const difference = newIds.filter(n => !old.some(o => o.id === n));

这导致返回 [3]

基本上,我目前正在使用它来确定是否缺少某些内容,如果缺少,则在我的数据库中创建它。

但是,我需要做相反的事情。如果删除了某些内容,我需要比较并删除该项目。

问题在于;此当前解决方案仅适用于“一种方式”,因此我无法执行上述操作。

理想情况下,无论是创建还是删除,我只需要 1 条语句,并且我只希望它返回任一数组中缺少的内容的 ID。

希望这是有道理的。

最佳答案

要查找出现在其中一个但不出现在另一个中的值,请使用 lodash 的

_.xor(array1, array2);

在你的情况下:

> const _ = require('lodash');

> const old = [
...   { id: 1, name: 'object_1' },
...   { id: 2, name: 'object_2' },
...   { id: 3, name: 'object_3' },
...   { id: 4, name: 'object_4' },
... ];

> const newIds = [1, 3, 5, 7];

> _.xor(old.map(x => x.id), newIds)
[ 2, 4, 5, 7 ]

关于javascript - 如何比较两个数组并返回差异? (双向工作?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55253821/

相关文章:

javascript - typescript + lodash - 找不到模块

javascript - 识别Javascript对象中的 "Class Name"

Javascript lodash按第一项合并数组项

javascript - 更改 map 上的坐标

javascript - 获取嵌套在 UL 标签中的所有元素

javascript - 使用 Object.assign 和 lodashs _.merge 函数返回新的未突变状态?

javascript - 如何使用 lodash 将对象中的数组数据与计数分组

javascript - 如何使用 moment 和 lodash 按对象字段分组并按日期计数?

javascript - 在 d3js 的热图网格中附加文本或圆圈

javascript - 如何对齐复选框并选择?