0

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

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基于foo数组的 N 个元素以编程方式构建具有 N 个维度的参考?

一些例子:

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

4

1 回答 1

2

我认为您想要的是某种查找函数,就像我在这里描述的那样,除了稍微修改以采用数组而不是多个参数

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"
}] */
于 2013-07-10T15:45:54.507 回答