2017-07-31 41 views
0

如何添加或替換到現有的對象數組中。可以說我有現有的陣列是這樣的:在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; 
}, 
+0

如果你可以使用圖書館,我建議你測試lodash:https://lodash.com/它可以幫助你用數組,集合和對象。 –

+1

我不同意,當你掌握'.filter','.map'和其他非常強大的JS數組開箱即用的方法時,LoDash變得毫無用處。 –

+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"}))

+0

您能否展示這個'var i = data.findIndex(e => e.id == obj.id);'簡單js – kittu

+0

感謝您介紹findIndex(),但是我的散列函數有什麼問題? – kittu

相關問題