gpt4 book ai didi

javascript - 如何按照内部对象分配的方式连接数组?

转载 作者:行者123 更新时间:2023-11-28 17:16:07 25 4
gpt4 key购买 nike

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

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

const users = [
{
id: 0,
name: "John",
hobby: "soccer"
},
{
id: 1,
name: "Alice",
hobby: "squash"
},
{
id: 2,
name: "Greg",
hobby: "guitar"
}
]

const newUsers = [
{
id: 0,
work: "developer"
},
{
id: 2,
work: "musician"
},
{
id: 3,
name: "Roger",
work: "accountant"
}
]

const concatArray = (newArray, oldArray) => {
const objectFromArray = array => array.reduce((object, user) => {
object[user.id] = user;
return object
}, {});

const objectOfOldArray = objectFromArray(oldArray);
const objectOfNewArray = objectFromArray(newArray);

const allIds = Object.keys({...objectOfOldArray, ...objectOfNewArray})

return allIds.map(id => {
const oldProps = objectOfOldArray[id] || {};
const newProps = objectOfNewArray[id] || {};
return {id, ...oldProps, ...newProps}
})
}

console.log(concatArray(newUsers, users))

它工作得很好,但应该有一个更充分的解决方案。我的意思是这是一个非常小的操作,向指定的对象添加一些属性,但我的解决方案过于复杂,无法实现这一点。应该有一种更简单的方法来赚取这个。

最佳答案

您可以尝试以下Array.forEach的方法

const users = [
{
id: 0,
name: "John",
hobby: "soccer"
},
{
id: 1,
name: "Alice",
hobby: "squash"
},
{
id: 2,
name: "Greg",
hobby: "guitar"
}
]

const newUsers = [
{
id: 0,
work: "developer"
},
{
id: 2,
work: "musician"
},
{
id: 3,
name: "Roger",
work: "accountant"
}
]

let updatedUsers = {};

[...users, ...newUsers].forEach(d => updatedUsers[d.id] = { ...(updatedUsers[d.id] || {}), ...d })

console.log(Object.values(updatedUsers))

关于javascript - 如何按照内部对象分配的方式连接数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53462177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com