在对象数组上使用map()检查差异

check difference using map() on arrays of object

本文关键字:检查 map 对象 数组      更新时间:2023-09-26

所以我想过使用map(),但我被卡住了。我想返回arr2,但想通过将其与arr进行比较来提示用户是否有更改。使用下面的方法,如果arr2有任何缺失项,我得到了未定义的id。

https://jsfiddle.net/b13rbjyv/

var arr = [{
  id: 1,
  name: 'something'
}, {
  id: 2,
  name: 'something2'
}]
var arr2 = [{
  id: 1,
  name: 'something'
}, {
  id: 2,
  name: 'something2'
}]
var result = arr.map(function(obj, i) {
  if (obj.id == arr2[i].id) {
    return obj;
  }
})
document.write(JSON.stringify(result))

您需要使用过滤器

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

如果你想改变对象,就应该使用map。例如,如果你只需要一个id数组,那么你就应该使用它。例如,你想获得id列表,那么

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

map为数组的每个给定元素返回一个元素。看起来您实际上需要的是使用filter。也许是这样的:

var result = arr.filter((elem, index) => elem.id === arr2[index].id);