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

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

因为比较“ native 数组”和“新数组”,它将返回 native 数组中的内容,而不是新数组中的内容,这样做的目的是了解它是否删除了某些项目。

请注意,新数组存在一个没有 _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 个数组要发送到这个函数。

In my example you can see item without _id, in this case the item should be discarded from the logic, need to take into account only the items that have _id

绘图我有两个容器

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

在这个例子中我不需要彩色的项目,我需要我在01中有但现在在02中没有的项目,你可以看到最后一个点是彩色的,也就是说,它没有01,现在它了有02,绣花和这个不一样,01里的,03里删掉了。

那么结果就是

R [|          || ]

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

如果我使用你正在谈论的逻辑,它会像这样返回我:

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

最佳答案

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

关于javascript - 返回新数组的对象数组之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50067692/

相关文章:

javascript - 设置第二次点击函数jQuery的延迟

javascript - 在 Ember.js 应用程序中实现 jQuery

javascript - Math.random() >= 0.5 和 Math.random() - 0.5 之间有什么区别

javascript - Redux reducer 作为纯函数

javascript - React 获取在 props 中传递的原生元素或子元素的高度和宽度

javascript - 使用 jQuery 监听浏览器宽度/高度变化

javascript - MutationObserver 和当前/计算的 CSS 样式

javascript - 如何在div中使用replace?

javascript - Dojo 获取,如何等待两个同时的异步获取?

javascript - 为什么要检查 Array.prototype.indexOf 的 bool 值?