JavaScript:连接对象数组
我有两个对象数组,如下所示:JavaScript:连接对象数组,javascript,arrays,Javascript,Arrays,我有两个对象数组,如下所示: array_1 = [ {'id': 1}, {'id': 2}, {'id': 3}, {'id': 4}, {'id': 5} ]; array_2 = [ {'name': 'Doe', 'age': 45}, {'name': 'John', 'age': 35}
array_1 = [
{'id': 1},
{'id': 2},
{'id': 3},
{'id': 4},
{'id': 5}
];
array_2 = [
{'name': 'Doe', 'age': 45},
{'name': 'John', 'age': 35}
];
我想将这两个数组连接起来,形成一个如下所示的数组:
result_array = [
{'id': 1, 'name': 'Doe', 'age': 45},
{'id': 2, 'name': 'John', 'age': 35},
{'id': 3},
{'id': 4},
{'id': 5}
]
我试过:
var result_array = array_1.concat(array_2);
但它给出了:
result_array = [
{'name': 'Doe', 'age': 45},
{'name': 'John', 'age': 35},
{'id': 1},
{'id': 2},
{'id': 3},
{'id': 4},
{'id': 5}
]
如何执行此操作?在数组_1上循环,对于数组_1中的每个对象,使用数组_1[I]和数组_2[I]的内容创建一个新对象,其中I是for循环迭代器。将此新对象推入新数组
您可以使用Object.assign()来连接这两个对象。您所需的输出表明,您需要从数组中的匹配位置(而不是连接)合并对象 您可以使用:
map()
以及:
Object.assign()
方法用于将所有可枚举自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象
请尝试以下方法:
var数组_1=[
{'id':1},
{'id':2},
{'id':3},
{'id':4},
{'id':5}
];
变量数组_2=[
{'name':'Doe','age':45},
{'name':'John','age':35}
];
var result_array=array_1.map((obj,idx)=>{
if(idx还有一种方法:
let array_1 = [
{'id': 1},
{'id': 2},
{'id': 3},
{'id': 4},
{'id': 5}
]
let array_2 = [
{'name': 'Doe', 'age': 45},
{'name': 'John', 'age': 35}
]
let tmp = array_1.length > array_2.length ? array_1 : array_2
let result = tmp.reduce((acc, val, i) => {
acc.push({...(array_1[i] || []), ...(array_2[i] || [])})
return acc
}, [])
console.log(result)
如果array\u 1
小于array\u 2
array1=[
array1 = [
{'id': 1},
{'id': 2},
{'id': 3},
{'id': 4},
{'id': 5}
];
array2 = [
{'name': 'Doe', 'age': 45},
{'name': 'John', 'age': 35}
];
var newArray = [];
for (var i = 0; i < array1.length; i++) {
var obj = array1[i];
if (array2[i]) {
for (key in array2[i]) {
obj[key] = array2[i][key];
}
newArray.push(obj);
}
};
console.log(Object.assign(array1, newArray))
{'id':1},
{'id':2},
{'id':3},
{'id':4},
{'id':5}
];
阵列2=[
{'name':'Doe','age':45},
{'name':'John','age':35}
];
var newArray=[];
对于(变量i=0;i
在本例中,Concat不是您想要的,您希望使用map
像这样的,
array_3 = array_1.map(function(a, i){
if(i < array_2.length){
return Object.assign({},a, array_2[i]);
}
else {
return a;
}
});
array_3=array_1.map(函数(a,i){
if(i
注意:您可能需要进行额外的检查,以确保数组_2长于/大于数组_1。使用数组reduce
,并在每次迭代中检查数组_2
中是否有与数组_1对应的索引中的和元素
让数组_1=[{
“id”:1
},
{
“id”:2
},
{
“id”:3
},
{
“id”:4
},
{
“id”:5
}
]
设数组_2=[{
'name':'Doe',
年龄:45岁
},
{
“姓名”:“约翰”,
年龄:35岁
}
]
让finalArray=array_1.reduce(函数(acc、curr、index){
加速推({
id:当前id
});
if(数组_2[索引]!==未定义){
acc[index].name=array_2[index].name;
acc[index].age=array_2[index].age
}
返回acc;
}, []);
console.log(finalArray)
您可以按如下方式使用Object.assign-添加两个不同的匹配对象和拼接-取消元素设置并将对象附加到数组的开头。
数组_1=[
{'id':1},
{'id':2},
{'id':3},
{'id':4},
{'id':5}
]
数组_2=[
{'name':'Doe','age':45},
{'name':'John','age':35}
]
var-obj;
for(数组的let key_1.keys())
{
for(让数组_2.keys()的key1)
{
如果(键==键1)
{
obj=Object.assign({},array_1[key],array_2[key]);//分配匹配的键
数组_1.拼接(键,1);//从数组_1中删除匹配的键
array_1.unshift(obj);//将对象附加到array_1
}
}
}
log(数组_1.sort())代码>非常感谢!那正是我想要的!!