我有两个数组
var a = [{'Id': 1, 'name':'bob', 'age':22}, {'Id': 2, 'name':'alice', 'age':12}, {'Id': 3, 'name':'mike', 'age':13}, {'Id': 4, 'name':'prasad', 'age':25}];
var b = [{'Id': 1, 'name':'bob', 'age':22}, {'Id': 2, 'name':'alice', 'age':12}, {'Id': 3, 'name':'mike', 'age':13}];
我想根据ID将数组a的每个元素与数组b进行比较(id始终是唯一的),并且只想记录数组a中存在的而不是数组b中存在的记录
这里的预期输出将是
{'Id': 4, 'name':'prasad', 'age':25}
到目前为止我尝试过的是:
for (var elementA of a) {
var uniqueElement = true;
for (var elementB of b) {
//if condition chekcs elementA.Id and elementB.Id
//setting values
}
}
相信会有优雅的人解决这个问题?
最佳答案
请尝试以下。创建一组b
数组的ID,然后基于该ID过滤数组a
。
情况1:如果有多个条目,请使用Array.filter
var a = [{'Id': 1, 'name':'bob', 'age':22}, {'Id': 2, 'name':'alice', 'age':12}, {'Id': 3, 'name':'mike', 'age':13}, {'Id': 4, 'name':'prasad', 'age':25}];
var b = [{'Id': 1, 'name':'bob', 'age':22}, {'Id': 2, 'name':'alice', 'age':12}, {'Id': 3, 'name':'mike', 'age':13}];
var objB = b.reduce((a,c) => a.add(c.Id), new Set());
var result = a.filter(v => !objB.has(v.Id));
console.log(result);
情况2:如果有1个条目,则使用Array.find
var a = [{'Id': 1, 'name':'bob', 'age':22}, {'Id': 2, 'name':'alice', 'age':12}, {'Id': 3, 'name':'mike', 'age':13}, {'Id': 4, 'name':'prasad', 'age':25}];
var b = [{'Id': 1, 'name':'bob', 'age':22}, {'Id': 2, 'name':'alice', 'age':12}, {'Id': 3, 'name':'mike', 'age':13}];
var objB = b.reduce((a,c) => a.add(c.Id), new Set());
var result = a.find(v => !objB.has(v.Id));
console.log(result);
关于javascript - 从JavaScript中的数组获取不存在的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52967497/