【问题标题】:js build object path in property assignmentjs在属性赋值中构建对象路径
【发布时间】:2011-10-27 12:41:26
【问题描述】:

有没有办法在构造后自动在赋值中创建子对象,即

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

上面给了我一个“obj.a is undefined”的错误

我为此编写了一个函数,但想知道是否有更简单的方法

_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


    【解决方案1】:

    不,在 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
    

    【讨论】:

    • 这很棒,但它是如何工作的呢?我没有看到根更新的位置。
    • 似乎根是您可能想要将该路径附加到的对象。
    猜你喜欢
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 2016-04-17
    • 2015-10-17
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多