Javascript 如何更新嵌套对象中的字段?
我有一个非常嵌套的状态,我正在尝试更新选项数组中对象内的字段Javascript 如何更新嵌套对象中的字段?,javascript,arrays,object,redux,nested,Javascript,Arrays,Object,Redux,Nested,我有一个非常嵌套的状态,我正在尝试更新选项数组中对象内的字段 const INITIAL_STATE = { player1: { name: null, options: [{ A: null B: { isUse: null, amount: null, extra: { X: null, Y: null } } }, {
const INITIAL_STATE = {
player1: {
name: null,
options: [{
A: null
B: {
isUse: null,
amount: null,
extra: {
X: null,
Y: null
}
}
}, {
A: null
B: {
isUse: null,
amount: null
extra: {
X: null,
Y: null
}
}
}]
},
player2: {
name: null,
options: [{
A: null
B: {
isUse: null,
amount: null,
extra: {
X: null,
Y: null
}
}
}, {
A: null
B: {
isUse: null,
amount: null
extra: {
X: null,
Y: null
}
}
}]
},
}
例如,给定name=player1 2 B和value=cheese,我可以使用以下命令更新选项数组的state.player1.options[2].B:
const keys = name.split(" ");
const player = keys[0]
const idx = keys[1]
const field = keys[keys.length - 1]
return merge({}, state, {
[player]: {
...[player],
options: state[player].options.map((option, i) =>
i === idx ? { ...option, [field]: value } : { ...option }
)
}
如何使其更具动态性,以便能够更新field state.player1.options[1].B.extra?
如果在额外的时间之后有另一个巢穴呢?
如果您喜欢使用库,可以使用 代码如下所示
const INITIAL_STATE = {
player1: {
name: null,
options: [{
A: null,
B: {
isUse: null,
amount: null,
extra: {
X: null,
Y: null
}
}
}, {
A: null,
B: {
isUse: null,
amount: null,
extra: {
X: null,
Y: null
}
}
}]
},
player2: {
name: null,
options: [{
A: null,
B: {
isUse: null,
amount: null,
extra: {
X: null,
Y: null
}
}
}, {
A: null,
B: {
isUse: null,
amount: null,
extra: {
X: null,
Y: null
}
}
}]
}
};
const mapper = require("map-factory")();
mapper
.map()
.set("player1.options[1].B", {"hi": "bye"});
console.log(JSON.stringify(mapper.execute(INITIAL_STATE), null, 2));
通过这种方式,您可以达到任意级别。如果传入一个对象而不是数组,您可能只需将其与现有状态合并即可。我必须使用数组作为选项,因为它包含多个对象