返回新数组的对象数组之间的差异

时间:2018-04-27 17:45:25

标签: javascript

我需要找到其他人在一个数组中没有的东西,我想在一个例子中我可以更好地解释:

我有一个对象数组如下:

NATIVE: [{"_id": "asd12312312", "name": "item 01"}, {"_id": "1123rwerwe", "name": "item 02"}];

但是我使用一个值进行了更新并添加了另一个值,所以它看起来像这样:

NEW: [{"_id": "1123rwerwe", "name": "item 02"}, {"name": "item 03"}];

这个函数需要返回我在另一个数组中所取的内容,也就是说,我需要结果的这个对象:

RESULT: [{"_id": "asd12312312", "name": "item 01"}];

因为比较“本机数组”和“新数组”,它将返回它在本机而不是新本机中的含义,这样做的目的是知道它是否删除了一些项目。

请注意,新数组中存在一个没有_id的项目,因为它添加了一个新项目,因为谁将生成_id是数据库本身。

我正在使用NODE JS所以此功能应该基本上在JAVASCRIPT

中完成

我有这个函数告诉我它在一个中有什么而不​​在另一个中,它运行得很好,但是对于我的返回情况只有它没有的东西,它不起作用:

const diffObjects = (object, base) => {
function changes(object, base) {
    return _.transform(object, function (result, value, key) {
        if (!_.isEqual(value, base[key])) {
            result[key] = (_.isObject(value) && _.isObject(base[key])) ? changes(value, base[key]) : value;
        }
    });
}
  return changes(object, base);
};

性能非常重要,因为我有N个数组要发送到这个函数。

  

在我的例子中你可以看到没有_id的项目,在这种情况下该项目应该从逻辑中被丢弃,只需要考虑具有_id的项目

绘图我有两个容器

01 [|||||||||||||]
02 [ |||||||||| |]

在这个例子中,我不需要彩色物品,我需要01中的物品,现在在02中没有,你可以看到最后一点是彩色的,也就是说,它没有01,现在它有02,刺绣不同于此,01中的内容在03年被删除。

然后结果将是

R [|          || ]

也就是说,它在01上,现在它没有在02

如果我使用你所说的逻辑,就会像这样回到我身边:

RESULT: [{"name": "item 03"}];

2 个答案:

答案 0 :(得分:1)

您可以使用函数filter和函数some来获取新数组中不存在的对象。

此方法使用属性_id作为两个数组之间的键/唯一名称



const native = [{"_id": "asd12312312", "name": "item 01"}, {"_id": "1123rwerwe", "name": "item 02"}],
      newArray = [{"_id": "1123rwerwe", "name": "item 02"}, {"name": "item 03"}],
      result = native.filter(o => !newArray.some(e => e['_id'] === o['_id']));
      
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:0)

如果我正确理解了代码片段diffObjects告诉您base参数中哪些元素不在object参数中。

所以使用diffObjects数组作为NEWbase数组作为NATIVE来调用object

我相信你自己没有看到这个解决方案,因为你正在思考原始数组和新数组。如果你改变看待它的方式,那么,"我只有2个阵列,想要知道哪个元素在一个而不是另一个"解决方案是什么变得更加明显。