使用带有标记

时间:2016-05-02 05:52:23

标签: javascript

我想返回arr2,但想通过将其与arr进行比较来提示用户是否有更改。使用以下方法,如果arr2有任何缺失的项目,我会收到未定义的ID。



var arr = [{
  id: 1,
  name: 'something'
}, {
  id: 2,
  name: 'something2'
}]

var arr2 = [{
  id: 1,
  name: 'something'
}]

var result = arr.filter(function(obj, i) {
  return obj.id == arr2[i].id;
});

document.write(JSON.stringify(result))




2 个答案:

答案 0 :(得分:1)

代码中的问题是arr[1]未定义,并且您尝试获取未定义的id属性。现在你可以做的是,在数组中获取id然后获取索引并根据过滤器中的内容进行检查。



var arr = [{
  id: 1,
  name: 'something'
}, {
  id: 2,
  name: 'something2'
}]

var arr2 = [{
  id: 1,
  name: 'something'
}];

var arrIds = arr2.map(function(v) {
  return v.id;
});

var result = arr.filter(function(obj) {
  var i = arrIds.indexOf(obj.id);
  return i > -1 &&
    obj.name == arr2[i].name; // check name property here
});

document.write(JSON.stringify(result))




答案 1 :(得分:0)

arr2 callback中循环.filter以测试arr2的每个项目。

var arr = [{
  id: 1,
  name: 'something'
}, {
  id: 2,
  name: 'something2'
}]

var arr2 = [{
  id: 1,
  name: 'something'
}, {
  id: 5,
  name: 'something'
}, {
  id: 8,
  name: 'something'
}];

var isValInArr = function(arr, key, val) {
  for (var i = 0, len = arr.length; i < len; i++) {
    if (arr[i][key] === val) {
      return true;
    }
  }
  return false;
};

var result = arr.filter(function(obj, i) {
  return isValInArr(arr2, 'id', obj.id);
});

document.write(JSON.stringify(result))