查找并替换多维JS数组中的元素,不要改变数组

时间:2016-03-11 20:57:07

标签: javascript arrays immutability

我有一个看起来像这样的数组:

org.apache.http.entity.mime.content.ContentBody

我有一个传入的Object,它应该替换数组中的一个对象。我可以使用[ [ {Obj}, {Obj}, {Obj} ], [ {Obj}, {Obj}, {Obj} ] ... ] 属性找到一个我想用for循环替换的Object并直接替换它:

id

如何在不改变原始数组的情况下实现相同的结果,最好在一个函数中返回包含合并对象的新数组?

为方便起见,这是js小提琴:https://jsfiddle.net/tnpxh8fy/

2 个答案:

答案 0 :(得分:3)

您应该使用.map,这会创建一个新数组:

function findObject(arr, target) {
  return arr.map(function(users) {
    return users.map(function(user) {
      if (user.id === target.id) {
        return target;
      } else {
        return user;
      }
    });
  });
}

答案 1 :(得分:1)

有些复制可以解决问题:

findObj = function(arrArrObj, needle) {
  var ret = Array.from(arrArrObj)
  for (let i in ret)
    for (let j in i)
      if (ret[i][j].id === needle.id) {
        ret[i] = Array.from(ret[i]) // as needed
        ret[i][j] = needle
        // break
      }
  return ret
}