如何动态地将子项添加到JavaScript对象(JSON)

时间:2015-12-09 02:41:00

标签: javascript json

我正在尝试创建一个JavaScript对象并动态定义其子对象。因此,子项是动态的,它们可能会在运行时更改。

我有什么? var _obj = {};

在下一步中,我想使用函数在运行时设置一些变量。我找不到有效的方法来实现以下功能:

setObjValue("spaceA.spaceB.id", 1);在以下路径中保存1

_obj.spaceA.spaceB.id = 1;

我尝试根据.拆分密钥,然后使用循环逐步创建路径。但是,由于我们在JavaScript中没有引用,因此无法实现此目的。

换句话说,如何使函数以下列模式添加对象?

_obj["spaceA"]["spaceB"]....["id"] = 1;

  • 运行前未定义根步数。所以我不能手动使用代码。我需要像上面的示例函数一样动态地实现这一点。

3 个答案:

答案 0 :(得分:3)

试试这个:

/rest/*

答案 1 :(得分:3)

递归!

var startingObj = {};
var path = "one.two.three.four".split('.');
var val = 7;

function recursiveFun(o, p, v){
  var key = p.shift(); // get the current key

  if (p.length == 0){
    // set key to val and exit
    o[key] = val;
    return;
  }

  o[key] = {}; // should check if this exists before overwriting
  recursiveFun(o[key], p, v);
}

recursiveFun(startingObj, path, val);

http://plnkr.co/edit/TgoRS0xkXGG6J3DzFxzi?p=info

答案 2 :(得分:-1)

这个应该以最有效的方式做到

function setObjValue(path, value) {
    path = path.split('.')
    var obj = path[0]
    //  make obj the root
    path.shift()
    //  remove root object from path
    while(path.length){
        //  move further in tree
        obj = obj[path[0]]
        obj.shift()
    }
    //  assign value
    obj = value
}