Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象指定为合并2个对象数组并保留自身属性_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 对象指定为合并2个对象数组并保留自身属性

Javascript 对象指定为合并2个对象数组并保留自身属性,javascript,ecmascript-6,Javascript,Ecmascript 6,我尝试使用对象分配合并2个对象数组。我知道我可以通过比较地图的ID来实现这一点,但不知何故,在object.assign中不起作用 const ageArr = [{ "id": 1, "age_range": "0 - 10 Years old", "value": 1 }, { "id": 2, "age_range": "11 - 20 Years old", "value": 1 }, { "id": 3, "age_range": "21 - 30 Ye

我尝试使用对象分配合并2个对象数组。我知道我可以通过比较地图的ID来实现这一点,但不知何故,在object.assign中不起作用

const ageArr = [{
  "id": 1,
  "age_range": "0 - 10 Years old",
  "value": 1
}, {
  "id": 2,
  "age_range": "11 - 20 Years old",
  "value": 1
}, {
  "id": 3,
  "age_range": "21 - 30 Years old",
  "value": 78
}]

const colorArr = [{
  "id": 1,
  "color": "#333"
}, {
  "id": 2,
  "color": "#666"
}, {
  "id": 3,
  "color": "#999"
}]

const mergedArr = Object.assign({}, ageArr, colorArr)
console.log(mergedArr)

您可以使用
map
方法结合对象来完成此操作

const ageArr=[{
“id”:1,
“年龄范围”:“0-10岁”,
“价值”:1
}, {
“id”:2,
“年龄范围”:“11-20岁”,
“价值”:1
}, {
“id”:3,
“年龄范围”:“21-30岁”,
“价值”:78
}]
常量colorArr=[{
“id”:1,
“颜色”:“333”
}, {
“id”:2,
“颜色”:“#666”
}, {
“id”:3,
“颜色”:“999”
}]
const mergedArr=colorArr.map((item,i)=>Object.assign({},item,ageArr[i]);
console.log(mergedArr)

您可以使用
map
方法结合对象来完成此操作。分配

const ageArr=[{
“id”:1,
“年龄范围”:“0-10岁”,
“价值”:1
}, {
“id”:2,
“年龄范围”:“11-20岁”,
“价值”:1
}, {
“id”:3,
“年龄范围”:“21-30岁”,
“价值”:78
}]
常量colorArr=[{
“id”:1,
“颜色”:“333”
}, {
“id”:2,
“颜色”:“#666”
}, {
“id”:3,
“颜色”:“999”
}]
const mergedArr=colorArr.map((item,i)=>Object.assign({},item,ageArr[i]);
console.log(mergedArr)
您可以使用和两个循环

const
ageArr=[{id:1,年龄范围:“0-10岁”,值:1},{id:2,年龄范围:“11-20岁”,值:1},{id:3,年龄范围:“21-30岁”,值:78}],
colorArr=[{id:1,color:#333},{id:2,color:#666},{id:3,color:#999}],
map=newmap(ageArr.map(o=>[o.id,o]),
mergedArr=colorArr.map(o=>Object.assign({},o,map.get(o.id)|{}));
console.log(mergedArr)
.as控制台包装{max height:100%!important;top:0;}
您可以使用和两个循环

const
ageArr=[{id:1,年龄范围:“0-10岁”,值:1},{id:2,年龄范围:“11-20岁”,值:1},{id:3,年龄范围:“21-30岁”,值:78}],
colorArr=[{id:1,color:#333},{id:2,color:#666},{id:3,color:#999}],
map=newmap(ageArr.map(o=>[o.id,o]),
mergedArr=colorArr.map(o=>Object.assign({},o,map.get(o.id)|{}));
console.log(mergedArr)

.as console wrapper{max height:100%!important;top:0;}
如果您只想将两个数组添加到一个数组中,可以尝试以下操作:

const ageArr=[{
“id”:1,
“年龄范围”:“0-10岁”,
“价值”:1
}, {
“id”:2,
“年龄范围”:“11-20岁”,
“价值”:1
}, {
“id”:3,
“年龄范围”:“21-30岁”,
“价值”:78
}]
常量colorArr=[{
“id”:1,
“颜色”:“333”
}, {
“id”:2,
“颜色”:“#666”
}, {
“id”:3,
“颜色”:“999”
}]
const mergedArr=ageArr.concat(colorArr)

console.log(mergedArr)
如果您只想将两个阵列添加到一个阵列中,可以尝试以下操作:

const ageArr=[{
“id”:1,
“年龄范围”:“0-10岁”,
“价值”:1
}, {
“id”:2,
“年龄范围”:“11-20岁”,
“价值”:1
}, {
“id”:3,
“年龄范围”:“21-30岁”,
“价值”:78
}]
常量colorArr=[{
“id”:1,
“颜色”:“333”
}, {
“id”:2,
“颜色”:“#666”
}, {
“id”:3,
“颜色”:“999”
}]
const mergedArr=ageArr.concat(colorArr)

console.log(mergedArr)
对象。assign
不会递归合并对象。它只做对象属性的浅拷贝。在您的情况下,它将属性
0
1
2
的值从
colorArr
复制到空对象

相反,在数组和
对象上使用循环。分配
以合并单个项:

const mergedArr = [];
for (let i=0; i<Math.min(ageArr.length, colorArr.length); i++) {
    assert(ageArr[i].id === colorArr[i].id); // if they don't match you need to do a lookup
    mergedArr[i] = Object.assign({}, ageArr[i], colorArr[i]);
}
const mergedArr=[];

对于(设i=0;i
对象。assign
不会递归合并对象。它只是对对象属性进行浅层复制。在您的情况下,它会将属性
0
1
2
的值从
colorArr
复制到空对象

相反,在数组和
对象上使用循环。分配
以合并单个项:

const mergedArr = [];
for (let i=0; i<Math.min(ageArr.length, colorArr.length); i++) {
    assert(ageArr[i].id === colorArr[i].id); // if they don't match you need to do a lookup
    mergedArr[i] = Object.assign({}, ageArr[i], colorArr[i]);
}
const mergedArr=[];


对于(设i=0;i数组是否有序,id是否始终与具有相同索引的对象相对应?@NinaScholz这没关系,对吗?只要两个数组的id匹配object assign做了不同的事情,它就会对对象而不是数组进行原型继承。@zb'
object.assign
与此无关inheritance@zb”“我想您将其与
对象.create
混淆。不,您的小提琴显示
对象.assign
返回其第一个参数-
Parent===Child
。数组是否有序,id是否始终与具有相同索引的对象相对应?@NinaScholz这不重要,对吗?只要两个数组的id匹配Objectassign做了不同的事情,它使对象的原型继承,而不是数组。@zb'
对象。assign
与此无关inheritance@zb“我想你把它和
对象混淆了。create
。不,你的小提琴显示
对象。assign
返回它的第一个参数-
Parent==Child
。这不是我想要的。这不是我想要的。嗯,这太复杂了,你有一个更简单的解决方案吗?简单是什么意思?一个包含更多行和一个对象的解决方案,用于引用相同的
id
?这很简单,但是如果ageArr有4项,它可能会中断。使用find也是一个解决方案,但是在大型数组上可能需要更多的时间。但是如果项目长度不相同,如何解决错误?嗯,这太复杂了,你有更简单的解决方案吗?简单是什么意思?一个包含更多行和一个对象的解决方案,用于引用相同的
id
?这很简单,但如果ageArr有4个项目,它可能会中断。使用find也是一个解决方案,但总体上是这样的