我有一个看起来像这样的数组:
org.apache.http.entity.mime.content.ContentBody
我有一个传入的Object,它应该替换数组中的一个对象。我可以使用[ [ {Obj}, {Obj}, {Obj} ], [ {Obj}, {Obj}, {Obj} ] ... ]
属性找到一个我想用for循环替换的Object并直接替换它:
id
如何在不改变原始数组的情况下实现相同的结果,最好在一个函数中返回包含合并对象的新数组?
为方便起见,这是js小提琴:https://jsfiddle.net/tnpxh8fy/
答案 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
}