javascript - 如何将两个对象与一个对象的某些属性和另一个对象的其他属性合并?
问题描述
我有两个对象(有些可能称为字典),如下所示:
object1 =
{
id123:
{
name: Copenhagen,
type: 'city'
}
}
object2 =
{
id123:
{
name: Copenhagen,
type: 'county',
props: { id1: true, id: false}
},
id1234:
{
name: Pars,
type: 'county',
props: { id1: true, id: false}
},
id12345:
{
name: London,
type: 'county',
props: { id1: true, id: false}
},
}
如果两个 id 相同,我的合并对象需要从 object1 中获取类型,并且需要保留来自 object2 的道具,如下所示(注意哥本哈根):
mergedObjects =
{
id123:
{
name: Copenhagen,
type: 'city',
props: { id1: true, id: false}
},
id1234:
{
name: Pars,
type: 'county',
props: { id1: true, id: false}
},
id12345:
{
name: London,
type: 'county',
props: { id1: true, id: false}
},
}
我用传播运算符尝试了以下操作:
mergedObjects = { ...object2, ...object1 }
但是整个 id 对象被替换,而不是合并。你能帮我吗?
解决方案
通过 object2 键,将值添加到合并并type
从 object1 更新,如果它们使用了 object2 的类型。
const object1 = {
id123: {
name: 'Copenhagen',
type: "city"
}
};
const object2 = {
id123: {
name: 'Copenhagen',
type: "county",
props: { id1: true, id: false }
},
id1234: {
name: 'Pars',
type: "county",
props: { id1: true, id: false }
},
id12345: {
name: 'London',
type: "county",
props: { id1: true, id: false }
}
};
const merged = {};
Object.keys(object2).forEach(key => {
merged[key] = { ...object2[key], type: object1[key] ? object1[key].type : object2[key].type };
});
console.log(merged);
推荐阅读
- android - Android 6 AudioManager 返回错误的 RingerMode
- python - 在情节中使用熊猫数据框的条形图
- c# - 我如何才能访问我的 System.Collections.Generic.List`1 [mySolution.Models.PermissionsModel] 类型的会话并进行一些测试
- javascript - splice 不删除当前元素
- asp.net-core - 启动 dotnet 失败(“dotnet”不是符号链接文件)
- amazon-web-services - 适用于 AWS Athena 的 Protobuf(Google 协议缓冲区)对 S3 中二进制文件的 AWS GLUE 转换
- javascript - 如何动态对齐饼图中的图例指向饼图
- php - 无法在 php 中解码此 json
- css - 是否可以在 CSS 中创建一个防止全局样式的 Guard 类名?全局样式可以修改
- javascript - 节点 JS crypto.createCipheriv 错误:无效的密钥长度