确定另一个数组中的数组包含值

时间:2019-01-02 17:25:57

标签: javascript

我要检查arr1是否包含arr2

我可以尝试使用.some并包含它,但不能为我返回正确的答案

arr1=[{Name:'John',Age:18},{Name:'Leona',Age:19},{Name:'Steve',Age:'21'}]
arr2=[{Name:'John',Age:18},{Name:'Hana',Age:19},{Name:'Josh',Age:20}]

我的期望

arr1=[{Name:'John',Age:18},{Name:'Leona',Age:19},{Name:'Steve',Age:'21'},{Name:'Hana',Age:19},{Name:'Josh',Age:20}]

3 个答案:

答案 0 :(得分:0)

您可以将array#everyarray#some一起使用。遍历arr2中的每个对象,并检查arr1中是否存在该对象。

let arr1=[{Name:'John',Age:18},{Name:'Leona',Age:19}],
    arr2=[{Name:'John',Age:18}],
    result = arr2.every(({Name, Age}) => {
      return arr1.some(o => o.Name === Name && o.Age === Age);
    });
console.log(result);

答案 1 :(得分:0)

由于它们不是同一对象,而只是具有相同值的对象,因此您必须比较每个值。

const arr1 = [{
  Name: 'John',
  Age: 18
}, {
  Name: 'Leona',
  Age: 19
}];
const arr2 = [{
  Name: 'John',
  Age: 18
}];

const check = arr1.some(e1 => arr2.some(e2 => e1.Name === e2.Name && e1.Age === e2.Age));
console.log(check);

答案 2 :(得分:0)

您可以缩小第一个数组并检查Name是否不在第一个数组中,然后将其添加到结果集中。

var array1 = [{ Name: 'John', Age: 18 }, { Name: 'Leona', Age: 19 }, { Name: 'Steve', Age: '21' }],
    array2 = [{ Name: 'John', Age: 18 }, { Name: 'Hana', Age: 19 }, { Name: 'Josh', Age: 20 }];

array2.reduce((r, o) => {
    if (!r.some(({ Name }) => o.Name === Name)) r.push(o);
    return r;
}, array1);

console.log(array1);
.as-console-wrapper { max-height: 100% !important; top: 0; }