【问题标题】:Javascript: build multidimensional Array programmaticallyJavascript:以编程方式构建多维数组
【发布时间】:2013-07-08 15:18:03
【问题描述】:

我的目标是能够通过向数组添加元素来跟踪我在 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...有没有办法基于foo 数组的N 个元素以编程方式构建jsonTree 引用?

一些例子:

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

【问题讨论】:

  • 你能解释一下你打算用这个做什么吗?它似乎是某种辅助构造,您要解决什么问题?
  • 此外,您的示例对象在语法上无效。请在 jsFiddle 上设置一个工作示例来演示您的问题。
  • @RocketHazmat 数组数组有一个维度,这就是区别。它的一些成员可能是其他一维数组,但它们不一定是。它是一个嵌套的数据结构。多维数组是统一的。您可以拥有一个表现得像多维数组的数组数组,但这不是构建它的唯一方法,也不是以任何方式强制执行的。
  • @RocketHazmat,说实话,我也不确定,但我的朋友 Google 向我透露了以下信息:stackoverflow.com/questions/597720/…。虽然这个问题是专门针对 C 的,但对于 JS 来说,答案就足够了。
  • @Tomalak:那么,多维数组是强制维数的数组数组吗?我从来不知道有这样的结构存在!猜猜这就是我来自 PHP/JavaScript 背景的原因。我一直使用术语“多维数组”来描述数据结构,例如:var multi = [[1,2,3],[4,5,6],[7,8,9]];。 :-) 我想没有什么能阻止你做var multi = ['a',[1,2,3],'b',[4,5,6],'c',[7,8,9,10]]; :-P

标签: javascript json


【解决方案1】:

我认为您想要的是某种查找函数,例如我 describe here,除了稍微修改以采用 Array 而不是多个参数

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"
}] */

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2010-09-07
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    相关资源
    最近更新 更多