如何在JavaScript中的2个对象数组中检查相等的属性值?

时间:2017-10-19 03:44:42

标签: javascript arrays javascript-objects

我们说我有2个数组:

const array_1 = [ { id: 1, sex: 'M' }, { id: 2, sex: 'F' }, { id: 3, sex: 'M' } ]
const array_2 = [ { id: 12, age:1 }, { id: 22, age: 4 }, { id: 3, age: 2 } ]

我想检查array_1中的值是否也在array_2中。我可以这样做:

array_1.forEach((el_1) => {
  array_2.forEach((el_2, i) => {
    if(el_1.id === el_2.id) alert(i);
  })
})

或使用ECMAScript 2015 findIndex方法:

array_1.forEach((el_1) => {
  const i = array_2.findIndex(x => x.id === el_1.id)
  if(i >= 0) alert(i);
})

如果您想检查输出:https://jsfiddle.net/v7bjnpa7/1/

通常情况下会有效,但有更清洁的方法吗?通过清洁我的意思是一种更好的方式,不会影响性能?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

if(array_1.find( e1 => array_2.find( e2 => e1.id == e2.id))) {
    alert('found');
}

答案 1 :(得分:1)

您可以使用下划线js [http://underscorejs.org/][1]

在那里你将有比较,交叉和更多的方法。

试一试

const array_1 = [ { id: 1, sex: 'M' }, { id: 2, sex: 'F' }, { id: 3, sex: 'M' } ];
const array_2 = [ { id: 12, age:1 }, { id: 22, age: 4 }, { id: 3, age: 2 } ];

array_1.forEach(function(item)
{

    array_2.forEach(function (item2) {

        if(item.id==item2.id)
        {
            console.log(item,item2)
        }
    });


});