如何添加或替换现有的对象数组。假设我有这样的数组:
productOffer.view = [
{id: 1, name: "john"},
{id: 2, name: "Sam"}
]
productOffer.view.forEach(function(el,i){
if(el.id == productOffer.createId){
productOffer.view[i] = ajaxCall.responseJSON
} else {
productOffer.view.push(ajaxCall.responseJSON);
}
});
尝试以下操作,但是这些值会被替换而不是添加:
productOffer.hashedArr = productOffer.hash(productOffer.view);
productOffer.view.forEach(function(el,i){
if(el.id == productOffer.createId){
productOffer.hashedArr[i] = ajaxCall.responseJSON
} else {
productOffer.hashedArr[i] = el;
}
});
for(var key in productOffer.hashedArr){
productOffer.view = [];
productOffer.view.push(productOffer.hashedArr[key]);
}
hash: function(arr){
var arrIndex = Object.create(null);
arr.forEach(function(el){
arrIndex[el.id] = el;
});
console.log('hash ', arrIndex);
return arrIndex;
},
答案 0 :(得分:1)
您可以使用findIndex()
检查数组中是否存在具有相同ID的对象,以及是否将其替换为新对象,或者是否将新对象推送到数组。
var arr = [
{id: 1, name: "john"},
{id: 2, name: "Sam"}
]
function addOrReplace(data, obj) {
var i = data.findIndex(function(e) {
return e.id == obj.id;
});
i != -1 ? data[i] = obj : data.push(obj);
return data;
}
console.log(addOrReplace(arr, {id: 1, name: "lorem"}))
console.log(addOrReplace(arr, {id: 3, name: "ipsum"}))