Javascript:以编程方式构建多维数组

时间:2013-07-10 15:36:38

标签: javascript json

我的目标是通过向Array添加元素然后使用此Array访问JSON中的嵌套节点,能够在JSON树中跟踪我的位置/深度。现在说数组foo它有一个元素:

foo = ["customers"]

这样该元素就可以作为JSON孩子的参考,比如说:

jsonTree["customers"]

其中jsonTree类似于:

{
"customers":{
  "name": "J. Goldsmith",
  "orders": [{
    "order": "1",
    "order": "2"
  }]
 }
}

然后foo最终会改变其大小并成为

foo = ["customers","orders"]

因此JSON引用将成为

jsonTree["customers"]["orders"]

现在说customers.orders可以成为customers.orders.order.date.etc.etc ...有没有办法以编程方式使用基于jsonTree数组的N个元素的N维构建foo引用?

一些例子:

我有["John","Williams"] - >我想建立composer["John"]["Williams"] [“Erich”,“Wolfgang”,“Korngold”] - >我想建立composer["Erich"]["Wolfgang"]["Korngold"]

1 个答案:

答案 0 :(得分:2)

我认为你想要的是某种查找函数,比如我describe here,除了略微修改以获取数组而不是多个参数

function generateLookupFunction(o) {
    return function lookup(arr) {
        var i, e = o;
        for (i = 0; i < arr.length; ++i) {
            if (!e.hasOwnProperty(arr[i]))
                throw "PathNotFoundError: " + arr.slice(0, i + 1).join('/');
            e = e[arr[i]];
        }
        return e;
    };
}

然后

var lookup = generateLookupFunction(jsonTree),
    foo = ["customers","orders"];
lookup(foo);
/*[{
    "order": "1",
    "order": "2"
}] */