Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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 如何以指定内部对象的方式连接数组?_Javascript - Fatal编程技术网

Javascript 如何以指定内部对象的方式连接数组?

Javascript 如何以指定内部对象的方式连接数组?,javascript,Javascript,好吧,要解释我想要什么有点难。让我更详细地解释一下。我有一个对象数组。因为数组元素的“唯一”标识符是它们的索引,所以如果我们想更改一个元素,我们需要知道哪个是目标索引。但是,即使我们有索引,我也不想改变整个对象,只需分配新对象并将它们“合并”在一起 我有一个解决方案,虽然很难看,但至少我想要的更有意义: const用户=[ { id:0, 姓名:“约翰”, 爱好:“足球” }, { id:1, 姓名:“爱丽丝”, 爱好:“壁球” }, { id:2, 姓名:“格雷格”, 爱好:“吉他” } ]

好吧,要解释我想要什么有点难。让我更详细地解释一下。我有一个对象数组。因为数组元素的“唯一”标识符是它们的索引,所以如果我们想更改一个元素,我们需要知道哪个是目标索引。但是,即使我们有索引,我也不想改变整个对象,只需分配新对象并将它们“合并”在一起

我有一个解决方案,虽然很难看,但至少我想要的更有意义:

const用户=[
{
id:0,
姓名:“约翰”,
爱好:“足球”
},
{
id:1,
姓名:“爱丽丝”,
爱好:“壁球”
},
{
id:2,
姓名:“格雷格”,
爱好:“吉他”
}
]
const newUsers=[
{
id:0,
作品:“开发者”
},
{
id:2,
作品:《音乐家》
},
{
id:3,
姓名:“罗杰”,
工作:“会计”
}
]
const concatArray=(newArray,oldArray)=>{
const objectFromArray=array=>array.reduce((对象,用户)=>{
对象[user.id]=用户;
回波信号
}, {});
const objectOfOldArray=objectFromArray(oldArray);
常量objectOfNewArray=objectFromArray(newArray);
constallids=Object.keys({…objectOfOldArray,…objectOfNewArray})
返回allIds.map(id=>{
constOldProps=objectOfOldArray[id]| |{};
const newProps=objectOfNewArray[id]| |{};
返回{id,…oldProps,…newProps}
})
}

log(concatArray(newUsers,users))
您可以尝试下面的方法
Array.forEach

const用户=[
{
id:0,
姓名:“约翰”,
爱好:“足球”
},
{
id:1,
姓名:“爱丽丝”,
爱好:“壁球”
},
{
id:2,
姓名:“格雷格”,
爱好:“吉他”
}
]
const newUsers=[
{
id:0,
作品:“开发者”
},
{
id:2,
作品:《音乐家》
},
{
id:3,
姓名:“罗杰”,
工作:“会计”
}
]
让updateUsers={};
[…用户,…新用户].forEach(d=>UpdateUsers[d.id]={…(UpdateUsers[d.id]| |{}),…d})

console.log(Object.values(updateUsers))
您可以尝试下面的方法
Array.forEach

const用户=[
{
id:0,
姓名:“约翰”,
爱好:“足球”
},
{
id:1,
姓名:“爱丽丝”,
爱好:“壁球”
},
{
id:2,
姓名:“格雷格”,
爱好:“吉他”
}
]
const newUsers=[
{
id:0,
作品:“开发者”
},
{
id:2,
作品:《音乐家》
},
{
id:3,
姓名:“罗杰”,
工作:“会计”
}
]
让updateUsers={};
[…用户,…新用户].forEach(d=>UpdateUsers[d.id]={…(UpdateUsers[d.id]| |{}),…d})

console.log(Object.values(updateUsers))
新用户是否可以拥有
用户中不存在的
id
?新用户是否可以拥有
用户中不存在的
id
?抱歉,我忘了在我的代码段中使用全新用户展开新用户。这就是问题的根源。更新的@GergőHorváthm可能是离题的,但是如果我在redux状态下复制原始用户,然后执行您的解决方案,reducer函数将保持纯吗?@GergőHorváth这是离题的,但您需要复制所有对象,而不仅仅是函数的纯数组,否则,它将改变原始对象,生成边-effects@GergőHorváth现在对于纯函数,我必须改变逻辑。请查看更新的代码。对不起,我忘记在我的代码片段中用一个全新的用户来扩展newUsers。这就是问题的根源。更新的@GergőHorváthm可能是离题的,但是如果我在redux状态下复制原始用户,然后执行您的解决方案,reducer函数将保持纯吗?@GergőHorváth这是离题的,但您需要复制所有对象,而不仅仅是函数的纯数组,否则,它将改变原始对象,生成边-effects@GergőHorváth现在对于纯函数,我必须改变逻辑。请查看更新的代码。