【问题标题】:Detect the element in an array [duplicate]检测数组中的元素[重复]
【发布时间】:2014-08-25 04:12:57
【问题描述】:

我有两个类似的数组

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!')
     } 
 }

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

【问题讨论】:

  • 对索引使用具有不同变量的嵌套循环。
  • 你将不得不深入比较对象,以及循环数组。
  • ...我假设您对“相同对象”的定义是两个具有匹配 .id 属性的对象。

标签: javascript


【解决方案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'
    }
}));

【讨论】:

    【解决方案2】:

    假设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!");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-06
      • 2020-08-24
      • 2014-08-23
      • 1970-01-01
      • 2018-09-17
      • 2015-03-13
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多