我有两个数组

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/

10-17 02:04