我很难使用Object.assign()
将嵌套对象与可能相同的键合并;
以代码为例
// Initial structure
let state = {
pageIndex: 1,
allResults: {
queries: {}
}
}
代码
const assign = (query, page) => {
const obj = {
[page]: {
res: 'hi'
}
}
state.allResults.queries = Object.assign(
{},
state.allResults.queries,
state.allResults.queries[query] || {[query]: {}},
obj
)
}
assign('hi', state.pageIndex);
assign('hi', (state.pageIndex + 1));
assign('hello', (state.pageIndex + 1));
console.log(state)
我得到了什么
state = {
pageindex: 1,
allResults: {
queries: {
1: {
res: 'hi'
},
2: {
res: 'hi'
},
hello: {},
hi: {}
}
}
}
我的期望
let state = {
pageIndex: 1,
allResults: {
queries: {
hi: {
1: {
res: 'h'
},
2: {
res: 'h'
}
},
hello: {
2: {
res: 'h'
}
}
}
}
}
所以,我这样做的方式并没有真正起作用,我无法弄清楚如何获得预期的结果。
提前致谢
答案 0 :(得分:2)
这会将您发送到queries
函数(assign
或hi
)的hello
密钥的所需子密钥分配给其先前的值,并与新价值。
state.allResults.queries[query] = Object.assign(
{},
state.allResults.queries[query] || {},
obj
)
答案 1 :(得分:1)
您可以使用嵌套的Object.assign
。
const assign = (query, page) => {
const obj = { [page]: { res: 'hi' } }
state.allResults.queries = Object.assign(
{},
state.allResults.queries,
{ [query]: Object.assign(state.allResults.queries[query] || {}, obj) }
);
}
let state = { pageIndex: 1, allResults: { queries: {} } };
assign('hi', state.pageIndex);
assign('hi', (state.pageIndex + 1));
assign('hello', (state.pageIndex + 1));
console.log(state)

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:1)
我认为这对您有用:
const assign = (query, page) => {
const obj = {
[page]: {
res: 'hi'
}
}
let _obj = Object.assign(
{},
state.allResults.queries[query] || {},
obj
);
state.allResults.queries = Object.assign(
{},
state.allResults.queries,
{ [query]: _obj }
)
}
首先,我创建了将分配给subQuery对象的普通对象。然后我将它合并到一个现有的(如果不是,{}
一个空的)对象中。
之后我将其合并到查询对象中。
希望它对你有所帮助。