我有一堆 JSON,其中包含多个对象、数组、字符串、 bool 值、数字等,它们存储在根级别和组件的一个对象中。
这是一个示例:
{
"theme": {
"auto": {
"sensor": "sensor.sn1_ldr",
"below": 600
},
"ui": {
"cards": {
"round": false,
"elevation": 1
}
},
...
},
...
}
我已经成功地在数组中传回项目的路径和新值,如下所示:
["theme", "auto", "sensor"]
我如何从那里设置该路径的新值? IE。相当于:
config.theme.auto.sensor = newValue;
但是使用传回的路径数组?
我到目前为止的方法:
handleConfigChange = (path, value) => {
console.log(path, value);
let config = this.state.config;
// Set the new value
this.setState({ config });
};
最佳答案
您可以存储最后一个键并通过从路径中获取键来减少对象。
function setValue(object, path, value) {
var last = path.pop();
path.reduce((o, k) => o[k] = o[k] || {}, object)[last] = value;
}
var config = { theme: { auto: { sensor: "sensor.sn1_ldr", below: 600 }, ui: { cards: { round: false, elevation: 1 } } } },
path = ["theme", "auto", "sensor"];
setValue(config, path, 'foo');
console.log(config);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 从键数组中设置对象/数组中的嵌套项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52458222/