如何在Javascript中高效地合并两个数组?
假设我有两个Javascript对象数组:如何在Javascript中高效地合并两个数组?,javascript,jquery,arrays,object,Javascript,Jquery,Arrays,Object,假设我有两个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!!'}]; 我现在想将新列表合并到myList,意思是: myList中已存在id的所有对象都应替换为newList 所有id不在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!!'}];
我现在想将新列表
合并到myList
,意思是:
中已存在id的所有对象都应替换为myList
newList
- 所有id不在
中的对象都应该从myList
添加到newList
myList
有人知道我怎样才能有效地做到这一点吗?欢迎所有提示 很抱歉,您需要做一些比较来比较您的身份证。 您可以对第一个对象数组执行一次迭代,以获得每个元素的ID属性。在此迭代中,您可以对合并数组执行另一次迭代,比较值,并将所需值推送到新的“结果”数组中 也许这可以帮助您使用嵌套的代码保持代码整洁:
希望这有所帮助。您可以使用对象来确保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(函数(x){
o[x.id]=x;
});
forEach(函数(x){
o[x.id]=x;
});
for(变量输入o){
新建推送(o[键])
}
document.body.innerHTML=''+JSON.stringify(newArr,null,4)+''
您可以在newList
中循环检查myList
中是否有具有该id的对象。如果有,请使用splice
将旧对象替换为新对象,否则将新对象推入myList
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;
};
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(函数(el){
var found=myList.filter(函数(obj){
返回obj.id==el.id;
});
如果(找到。长度){
myList.splice(myList.indexOf(发现[0]),1,el);
}
否则{
myList.push(el);
}
});
警报(JSON.stringify(myList,null,“\t”)代码>尝试:
返回
[Object{id=97,info=“ble”},Object{id=25,info=“blu”},Object{id=5,info=“blo”},Object{id=3,info=“different info!!”}]
您可以使用数组.prototype.concat()
和数组.prototype.filter()
方法来实现这一点
在使用标志创建数组时跟踪它-否则必须在其中一个数组上执行初始循环,并使用id作为键创建新对象;)我想这个链接可能会对你有所帮助
combineArray([{id: 3, info: 'bla'}, {id: 97, info: 'ble'}, {id: 25, info: 'blu'}], [{id: 5, info: 'blo'}, {id: 3, info: 'different Info!!'}] );
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);