gpt4 book ai didi

javascript - 合并嵌套对象而不改变

转载 作者:行者123 更新时间:2023-11-29 19:11:36 25 4
gpt4 key购买 nike

我有以下 2 个 JavaScript 对象:

let o1 = {
entities: {
1: {
text: "fooo",
nested: {
ids: [1, 2, 3],
flag: true
}
}
}
};

let o2 = {
ids: [4, 5, 6]
}

我想合并它们而不改变它们,得到一个看起来像这样的对象:

let o3 = {
entities: {
1: {
text: "fooo",
nested: {
ids: [1, 2, 3, 4, 5, 6],
flag: true
}
}
}
};

可能有 n 个 entities,但只有 entityId 定义的那个会受到影响。我尝试了什么:

let entityId = 1;

let o3 = Object.assign({}, o1, {
entities: Object.assign({}, o1.entities, {
[entityId]: Object.assign({}, o1.entities[entityId].nested,
{ ids: [...o1.entities[entityId].nested.ids, ...o2.ids] }
)
})
});

问题是 text: "fooo",nested: 完全消失了。

我的做法对吗?这段代码可以优化吗?

最佳答案

由于您标记了 Redux,我假设您正在使用 React 并建议您使用不变性助手 - https://facebook.github.io/react/docs/update.html

您的代码如下所示:

let o3 = update(o1, {
entities: {
[entityId]: {
nested: {
ids: {
$push: [4, 5, 6]
}
}
}
}
})

ES6

您的逻辑是正确的,但是您的代码中缺少 nested 对象:

let o3 = Object.assign({}, o1, {
entities: Object.assign({}, o1.entities, {
[entityId]: Object.assign({}, o1.entities[entityId], {
nested : Object.assign({}, o1.entities[entityId].nested ,{
ids: [...o1.entities[entityId].nested.ids, ...o2.ids] })
}
)
})
});

关于javascript - 合并嵌套对象而不改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38491840/

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