javascript - 动态生成 JavaScript 对象的创造性方法

标签 javascript function helper

我正在使用 JavaScript 对象,需要在对象结构深处设置一个值。

可以说:

a.b.c.d.e.f.g = "some value";

我不知道所有这些对象是否都已创建,所以我最终会这样做:

a = a || {};
a.b = a.b || {};
a.b.c = a.b.c || {};
a.b.c.d = a.b.c.d || {};
a.b.c.d.e = a.b.c.d.e || {};
a.b.c.d.e.f = a.b.c.d.e.f || {};
a.b.c.d.e.f.g = "some value";

肯定有更好的方法来做到这一点吗?

最佳答案

最简单的方法是使用字符串,按点分割,然后循环。当你循环时,你检查它是否存在,如果存在,你就使用它。如果没有,那么您将创建一个新对象。这样做直到到达设置值的末尾。

const setValue = (obj, path, value) => {
  path.split('.') // split on the dots
    .reduce((o, k, i, a) => {
      o[k] = (i + 1 === a.length) // check if we are at last index
        ? value  // if last index use the value
        : (o[k] || {})  // else return object or set new one
      return o[k]  // return the current step in the object
    }, obj)  // start location
}

setValue(window, 'a.b.c.d.e.f.g', 'some value')
console.log(a.b.c.d.e.f.g)


var foo = { a : { b: {z : {} } } }
setValue(foo, 'a.b.c.d.e.f.g', 'another value')
console.log(foo)

关于javascript - 动态生成 JavaScript 对象的创造性方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54470640/

相关文章:

javascript - Rails 按钮上的点击调用方法

Java Netbeans 绝对路径

javascript - 只有元组时如何从 JSON 将数据加载到 D3 图表

javascript - 使用 Javascript 按变量获取数据

javascript - 我需要在jasmine测试文件中使用 'use strict'的函数形式吗?

algorithm - 这个伪代码的时间复杂度是多少?

Python:确定列表列表是否包含定义的序列

JavaScript 代码在 IE 10 中不起作用(事件不触发)

JavaScript:带有回调和参数的事件监听器

macos - 如何处理有关核心数据、共享首选项和通知的 Mac OS X Helper/Main 应用程序架构?