Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 属性分配中的js生成对象路径_Javascript_Object_Properties - Fatal编程技术网

Javascript 属性分配中的js生成对象路径

Javascript 属性分配中的js生成对象路径,javascript,object,properties,Javascript,Object,Properties,是否有一种方法可以在构造后在指定中自动创建子对象,即 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]]

是否有一种方法可以在构造后在指定中自动创建子对象,即

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中没有内置的方法来实现这一点。唯一的方法就是像以前一样创建自己的函数。如果您想要点运算符/符号的方便,可以使用以下功能:

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
var set=函数(路径、值、根){
var segments=path.split('.'),
光标=根| |窗口,
段
我
对于(i=0;i2

这很好,但它到底是如何工作的?我看不到根在哪里得到更新。似乎根就是您可能想要附加该路径的对象。