javascript - 创建具有第 n 级子对象的对象

标签 javascript

<分区>

我有一个名为 MyObject 的对象和一个名为 createEntry() 的方法,旨在创建一个新的MyObject 的属性和该属性的子属性,或者如果它已经存在则完全跳过它。

我的代码:

var MyObject = {
    createEntry: function (val1, val2, val3, val4) {
        this[val1] = this[val1] || {};
        this[val1][val2] = this[val1][val2] || {};
        this[val1][val2][val3] = val4;
    }
};

MyObject.createEntry("val1", "val2", "val3", "val4");

如上面的函数所示,我尝试为 createEntry() 方法的每个参数创建一个新的子对象,最后两个除外,其中 val3 是一个propertymethod 并且val4 是它的值。

在我的方法处于当前状态的情况下,我只能达到第 3 级,而后续的方法需要越来越长的代码。我假设上述可以通过 while 循环实现,但我还没有弄明白。

问题:如何根据传递给上述函数的参数数量以如下所示的树形方式创建无限子对象:

var MyObject = {
   val1: {
      val2 {
         val3: val4
      }
   }
}

最佳答案

reduceRight似乎很适合这个:

function createEntry(...args) {
  return args.reduceRight(function(prev, curr) {
    return {[curr]: prev};
  });
}
console.log(createEntry("val1", "val2", "val3", "val4"));

关于javascript - 创建具有第 n 级子对象的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39521548/

相关文章:

javascript - JavaScript 事件循环是否在映射迭代之间产生控制?

javascript - DOM onclick 处理程序参数/执行上下文

javascript - javascript中indexOf的问题

javascript - 为什么服务端渲染内容被vue取代

javascript - 在字母列表中查找丢失的字母

javascript - javascript函数之间的差异

javascript - 如何在不相关的组件之间共享数据? Angular 6

javascript - 如何使用 XMLHttpRequest 对象将 Access-Control-Allow-Origin 设置为 "*"?

javascript - ANT Galio 浏览器性能问题

Javascript 数字变量比较不起作用