我需要找到其他人在一个数组中没有的东西,我想在一个例子中我可以更好地解释:
我有一个对象数组如下:
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"}];
答案 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
数组作为NEW
和base
数组作为NATIVE
来调用object
。
我相信你自己没有看到这个解决方案,因为你正在思考原始数组和新数组。如果你改变看待它的方式,那么,"我只有2个阵列,想要知道哪个元素在一个而不是另一个"解决方案是什么变得更加明显。