javascript - 从键数组中设置对象/数组中的嵌套项

标签 javascript arrays json reactjs object

我有一堆 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/

相关文章:

Python-没有名为 'azure' 的模块

javascript - 通过 socket.id 向客户端发送消息

javascript - 我如何使用 createjs 检测舞台上的特定 child

C# - 返回泛型数组类型

java - 使用Gson序列化公开字段时如何更改字段名称?

javascript - 谷歌闭包编译器和 json

javascript - 未捕获的类型错误 : Object [object global] has no method '__initBubble'

javascript - 嵌入 YouTube Live Feed

arrays - 为什么在Elixir中无法枚举元组?

arrays - 如何删除 bash 数组中的确切元素?