Javascript 合并两个对象并通过添加新键增强结果
目前我有两个对象(一个是JSON模式,另一个是来自API的响应),我希望合并它们以更好地映射和使用 架构如下所示:Javascript 合并两个对象并通过添加新键增强结果,javascript,object,functional-programming,Javascript,Object,Functional Programming,目前我有两个对象(一个是JSON模式,另一个是来自API的响应),我希望合并它们以更好地映射和使用 架构如下所示: // schema { key: { description: "foo", properties: { values: { title: "foo", type: "Array" }, type: "string"
// schema
{
key: {
description: "foo",
properties: {
values: {
title: "foo",
type: "Array"
},
type: "string"
},
type: "object"
},
foo: {
title: "title",
description: "bar"
},
bar: {
title: "title",
description: "who"
}
}
我的响应对象与此类似:
// response
{
key: {
values: [0, 1]
type: "point"
},
foo: null,
bar: "some string"
}
我只想合并这两个对象,但是使用constmergedobject={…schema,…response}
将导致重写这些值
因此,我想要的结果将包含一个名为value
的新对象属性,或者包含响应
对象的值的东西:
{
key: {
value: {
values: [0, 1],
type: "point",
},
description: "foo",
properties: {
values: {
title: "foo",
type: "Array"
},
type: "string"
},
type: "object"
},
foo: {
value: null,
title: "title",
description: "bar"
},
bar: {
value: "some string",
title: "title",
description: "who"
}
}
使用spread运算符是否可行?我在这里找不到合适的解决方案,因为lodashassign
或assignIn
也不提供该功能
我也尝试过这个功能:
function merge (...objs) =>
[...objs].reduce(
(acc, obj) =>
Object.keys(obj).reduce((a, k) => {
acc[k] = acc.hasOwnProperty(k) ? [].concat(acc[k]).concat(obj[k]) : obj[k];
return acc;
}, {}),
{}
);
但它给了我
{
bar: [
{
title: "title",
description: "who"
},
"some string",
],
foo: [
{
title: "title",
description: "bar",
},
null
],
key: [
{
description: "foo",
properties: {
values: {
title: "foo",
type: "Array"
},
type: "string"
},
type: "object"
},
{
values: [0, 1]
type: "point"
}
]
}
这也不是我想要的
感谢您的帮助,谢谢 你需要调查一下
const数据={
关键:{
描述:'foo',
特性:{
价值观:{
标题:"富",,
键入:“数组”,
},
键入:“字符串”,
},
类型:“对象”,
},
傅:{
标题:“标题”,
描述:'bar',
},
酒吧:{
标题:“标题”,
描述:'谁',
},
};
常数res={
关键:{
值:[0,1],
键入:“点”,
},
foo:null,
酒吧:“一些字符串”,
};
常量输出={…数据};
Object.keys(res.forEach)(r)=>{
常量isPresent=!!(数据[r]);
如果(显示){
常数响应值=res[r];
输出[r]={responseValues,…数据[r]};
}否则{
输出[r]=res[r];
}
});
控制台日志(输出)代码>您可以组合和:
const objA={
关键:{
描述:“foo”,
特性:{
价值观:{
标题:“富”,
类型:“数组”
},
类型:“字符串”
},
类型:“对象”
},
傅:{
标题:“标题”,
说明:“酒吧”
},
酒吧:{
标题:“标题”,
描述:“谁”
}
}
常数objB={
关键:{
值:[0,1],
类型:“点”
},
foo:null,
酒吧:“一些字符串”
}
函数合并对象(objectA、objectB){
const mergedObject={};
Object.key(objectA.forEach)(key)=>{
合并对象[键]={
…对象A[键],
值:objectB[key]的类型=='object'&&objectB[key]!==null
?{…objectB[key]}
:objectB[键]
}
})
返回合并对象;
}
log(合并对象(objA,objB))代码>