检测数组中的元素

时间:2014-07-03 21:53:12

标签: javascript

我有两个数组,比如

var array1 = [
    {
      id: '1',
      name: 'test'
    },
    {
      id: '2',
      name: 'test2'
    },
    {
      id: '3',
      name: 'test3'
    }
]

var array2=[
    {
      id: '2',
      name: 'test2'
    }
]

我想遍历数组1并找到相同的对象并在数组1中添加更多属性

我有类似

的东西
 for(var i=0; i < array1.length; i++) {
     if(array2[i].id == array1[i].id){
         alert('find!')
     } 
 }

我理解上面的代码不起作用,因为索引不同。有人可以帮我解决这个问题吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

现在是 ECMA5

的时候了
var array1 = [
    {
      id: '1',
      name: 'test',
      foo: {
        bar: 'bar',
        quux: 'quux'
      }
    },
    {
      id: '2',
      name: 'test2'
    },
    {
      id: '3',
      name: 'test3'
    }
];

function equal(objA, objB) {
    if(Object.keys(objA).length !== Object.keys(objB).length) {
        return false;
    }

    var areEqual = Object.keys(objA).every(function(key) {
        if(typeof objA[key] === "object") {
            return equal(objA[key], objB[key]);
        }
        return objA[key] === objB[key];
    });

    return  areEqual;
}

function hasElement(array, element) {
    return array.some(function(el) {
        return equal(el, element);
    });
}

console.log(hasElement(array1, {
  id: '1',
  name: 'test',
  foo: {
    bar: 'bar',
        quux: 'quux'
    }
}));

答案 1 :(得分:0)

假设array2中的ID都是唯一的,我会创建一个对象,其键是ID:

var obj2 = {};
for (var i = 0; i < array2.length; i++) {
    obj2[array2[i].id] = array2[i];
}

然后我会用它来找到匹配的元素:

for (var i = 0; i < array1.length; i++) {
    if (obj2[array1[i].id]) {
        alert("find!");
    }
}