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"}];
解决方案
您可以使用函数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; }
推荐阅读
- haskell - 如何在 Haskell 中将自定义类型转换为整数?
- sql - postgreSQL 查询 - 查找下一课
- python - 熊猫复制切片杀死jupyter内核
- c# - unity OnMouseDown 太慢
- angular - 将 obs 与各种过滤器选项相结合
- neo4j - neo4j cypher - 匹配不存在相同类型的另一个特定节点的节点
- python - 如何检测我在 python3 中使用的 Windows 桌面?
- android - 我可以在我的 Fragments 构造函数中输入参数吗
- javascript - JS:如何将链式动画保存为变量以播放、暂停等
- c# - C# 表单大小不正确