在javascript

时间:2017-07-31 09:18:10

标签: javascript

如何添加或替换现有的对象数组。假设我有这样的数组:

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;
},

1 个答案:

答案 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"}))