js在属性赋值中构建对象路径

问题描述 投票:0回答:2

有没有一种方法可以在构造后自动在分配中创建子对象,即

var obj = {};
obj.a.b.c=13;

上面给了我一个“obj.a未定义”错误

我写了一个函数来做到这一点,但想知道是否有更简单的方法

_setObjectProperty(obj,13,['a','b','c']);
function _setObjectProperty(obj,value,loc)
{
    if(loc.length>1) {
        obj[loc[0]] = obj[loc[0]] || {};
        _setObjectProperty(obj[loc[0]],value,loc.splice(1));
    }
    else if(loc.length===1) {
        obj[loc[0]]=value;
    }
}
javascript object properties
2个回答
12
投票

不,JavaScript 中没有内置方法可以执行此操作。唯一的方法是像您一样创建自己的函数。如果您想要方便的点运算符/符号,您可以使用以下函数:

var set = function(path, value, root) {
  var segments = path.split('.'),
      cursor = root || window,
      segment,
      i;

  for (i = 0; i < segments.length - 1; ++i) {
     segment = segments[i];
     cursor = cursor[segment] = cursor[segment] || {};
  }

  return cursor[segments[i]] = value;
};

set("a.b.c", 2);

console.log(a.b.c) // => 2

0
投票

单行代码:

path = 'a.b.c'
value = {"hello": "world"};

obj = JSON.parse('{"' + path.split('.').join('": {"') + `": "${JSON.stringify(value)}"` + '}'.repeat(parts.length));
© www.soinside.com 2019 - 2024. All rights reserved.