Javascript 将较小的数组(具有键值对的对象元素)组合到较大的数组中
我有两个数组(initialArray和UpdateArray),都有18个元素 initialArray中的每个元素都是一个具有5个键值对的对象 初始数组:Javascript 将较小的数组(具有键值对的对象元素)组合到较大的数组中,javascript,arrays,object,key-value,Javascript,Arrays,Object,Key Value,我有两个数组(initialArray和UpdateArray),都有18个元素 initialArray中的每个元素都是一个具有5个键值对的对象 初始数组: [0] head: 'hi', a: '', b: '', c: '', d: '' [1] head: 'yo', a: '', b: 'old', c: '', d: '' . . . UpdateArray与initialArray类似,但: 1) 它不会有全部5个键值(
[0]
head: 'hi',
a: '',
b: '',
c: '',
d: ''
[1]
head: 'yo',
a: '',
b: 'old',
c: '',
d: ''
.
.
.
UpdateArray与initialArray类似,但:
1) 它不会有全部5个键值(仅在2和3之间,包括head)。
2) initialArray具有空值或旧值,而UpdateArray将是新值/填充值)
3) 元素的顺序不同
e、 g
更新阵列:
[0]
head:'yo',
b: 'bb',
d: 'dd'
[1]
head:'hi',
b: 'bb',
a: 'aa'
.
.
.
是否有人可以在中提供一些建议,以使用UpdateArray中的键值覆盖initialArray(使用“head”键匹配数组之间的元素)。头键永远不会被更新,但其他键值会被更新
我会在需要的时候运行几次,所以我不能假设initialArray总是有空值。如果空白值未被覆盖,则它们保留在如下结果:
组合阵列:
[0]
head: 'hi',
a: 'aa',
b: 'bb',
c: '',
d: ''
[1]
head: 'yo',
a: '',
b: 'bb',
c: '',
d: 'dd'
.
.
.
有什么建议吗?我当前的尝试是尝试使用3个for循环执行某些操作:
for (var k in updatedArray){
for (var kk in initialArray){
if(updatedArray[k].head ==initialArray[kk].head){
for (var kkk in updatedArray[k][kk]){
initialArray[k][kk][kkk] = updatedArray[k][kk][kkk];
}
}
}
}
在本例中,k是索引(0,1),kk是键(head、a、b等),kkk是键值的值。虽然这似乎不起作用,但这是您需要的。尝试访问第三个循环中的属性的方式不正确。请参阅下面的代码
var initarray=[{
头:“嗨”,
a:“”,
b:“,
c:“,
d:'
}, {
头:“哟”,
a:“”,
b:'旧',
c:“,
d:'
}]
var updatedarray=[{
头:“哟”,
b:‘bb’,
d:‘dd’
}, {
头:“嗨”,
b:‘bb’,
a:‘aa’
}]
for(updateArray中的变量k){
for(initarray中的变量kk){
if(updateArray[k].head==initarray[kk].head){
for(更新阵列[k]中的变量kkk){
initarray[kk][kkk]=updateArray[k][kkk];
}
}
}
}
log(JSON.stringify(initarray));
//log(initarray)代码>编辑:我对以前的代码进行了改进。这是我能想到的最简单的解决方案(用于Object.assign
):
请记住,如果updateArray
有额外的属性,它们也将被添加
updatedArray.forEach(function(update){
var initial = initialArray.find(x => x.head === update.head);
Object.assign(initial, update);
});