寻找在多维对象中创建分层数据的简洁方法

时间:2011-03-31 09:33:00

标签: javascript

如果我想在多维对象中创建一个新节点,我必须在添加之前检查父对象是否存在。例如

if(typeof root_object["object1"] == "undefined")
    root_object["object1"] = [];
if(typeof root_object["object1"]["object2"] == "undefined")
    root_object["object1"]["object2"] = [];
root_object["object1"]["object2"]["object3"] = something_or_other;

是否有一种更简单,更简洁的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

Javascript不会自动为您执行此操作,但您可以编写执行此操作的函数:

function add_hier(obj,path,value) {
  var n=path.length;
  for (var i=0; i<n-1; ++i) {
    var field = path[i];
    if (!(field in obj)) { obj[field] = []; }
    obj = obj[field];
  }
  obj[path[n-1]] = value;
}

add_hier(root_object, ["object1","object2","object3"], something_or_other);

(危险:完全未经测试的代码;可能完全由错误,语法错误和放射性废物组成。请谨慎使用。)