[英]How to efficiently merge two arrays in Javascript?
假設我在Javascript中有兩個對象數組:
var myList = [{id: 3, info: 'bla'}, {id: 97, info: 'ble'}, {id: 25, info: 'blu'}];
var newList = [{id: 5, info: 'blo'}, {id: 3, info: 'different Info!!'}];
我現在想將newList
“合並”到myList
中,意思是:
myList
已存在id的所有對象應替換為newList
的對象 myList
不存在id的所有對象應該從newList
添加到myList
但是,我不明白,如何檢查具有特定id的對象是否已存在於數組中。 我想你可以為newList中的每個項目對myList進行循環,但這不是很可擴展。
有誰知道我怎樣才能有效地做到這一點? 歡迎所有提示!
您可以使用一個對象來確保ID是唯一的,這將自動覆蓋現有ID,然后將其轉換回數組
var myList = [{id: 5, info: 'bla'}, {id: 97, info: 'ble'}, {id: 25, info: 'blu'}]; var newList = [{id: 5, info: 'blo'}, {id: 3, info: 'different Info!!'}]; var o = {}; var newArr = []; myList.forEach(function(x) { o[x.id] = x; }); newList.forEach(function(x) { o[x.id] = x; }); for (var key in o) { newArr.push(o[key]) } document.body.innerHTML = '<pre>' + JSON.stringify(newArr, null, 4) + '</pre>';
嘗試:
function combineArray(array1, array2) {
var arr = array1.concat(array2);
for(var i = 0; i < arr.length; ++i) {
for(var j = i + 1; j < arr.length; ++j) {
if(arr[i].id === arr[j].id)
arr.splice(i, 1);
}
}
return arr;
};
然后
combineArray([{id: 3, info: 'bla'}, {id: 97, info: 'ble'}, {id: 25, info: 'blu'}], [{id: 5, info: 'blo'}, {id: 3, info: 'different Info!!'}] );
回報
[Object { id=97, info="ble"}, Object { id=25, info="blu"}, Object { id=5, info="blo"}, Object { id=3, info="different Info!!"}]
我很遺憾地說,你必須做一些比較來比較你的身份證。 您可以對第一個對象數組進行迭代,以獲取每個元素的ID屬性。 在這個itteration中,您可以在合並數組上進行另一次迭代,比較值並將您想要的值推送到新的“result”數組。
也許這可以幫助您使用嵌套的itterations保持代碼整潔:
希望這有幫助。
你可以遍歷newList
檢查,如果myList
有這樣的ID的對象。 如果是,請用新的splice
替換舊的,否則將新對象推入myList
。
var myList = [{id: 3, info: 'bla'}, {id: 97, info: 'ble'}, {id: 25, info: 'blu'}]; var newList = [{id: 5, info: 'blo'}, {id: 3, info: 'different Info!!'}]; newList.forEach(function(el) { var found = myList.filter(function(obj) { return obj.id == el.id; }); if (found.length) { myList.splice(myList.indexOf(found[0]), 1, el); } else { myList.push(el); } }); alert( JSON.stringify(myList, null, '\\t') );
你可以使用array.prototype.concat()
和array.prototype.filter()
方法。
var myList = [{id: 3, info: 'bla'}, {id: 97, info: 'ble'}, {id: 25, info: 'blu'}];
var newList = [{id: 5, info: 'blo'}, {id: 3, info: 'different Info!!'}];
var temp = {};
var output = newList.concat(myList).filter(function(v){
if (temp[v.id]){
return false;
}
temp[v.id] = true;
return true;
});
console.log(output);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.