首页 > 解决方案 > 返回新数组的对象数组之间的差异

问题描述

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

我有一个对象数组,如下所示:

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"}];

标签: javascript

解决方案


您可以使用函数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; }


推荐阅读