【问题标题】:3 "Dimensional" array in JSON with JQuery3 带有 JQuery 的 JSON 中的“维度”数组
【发布时间】:2012-08-15 14:35:19
【问题描述】:

我想念 VB。也许这很可悲……

我需要制作一个“3 维”数组来表示以下数据。数据以 XML 开头,然后被解析为二维“数组数组”,如下所示(为清楚起见添加了描述符):

[NodeArray]
    [Node: 0][Year: 2012][Quantity1: 3][Quantity2: 5] [Title: Orange]
    [Node: 1][Year: 2012][Quantity1: 5][Quantity2: 9] [Title: Apple]
    [Node: 2][Year: 2011][Quantity1: 4][Quantity2: 9] [Title: Orange]
    [Node: 3][Year: 2011][Quantity1: 8][Quantity2: 12] [Title: Apple]
    [Node: 4][Year: 2010][Quantity1: 2][Quantity2: 6] [Title: Orange]
    [Node: 5][Year: 2010][Quantity1: 10][Quantity2: 2] [Title: Apple]

我想将这个 2-D Array 解析为 3-D Object Array,如下所示:

[Year Array]
    [2012]
        [Quantity1]: [3],[7]
        [Quantity2]: [5],[9]
        [Title]: [Orange],[Apple]
    [2011]
        [Quantity1]: [4],[8]
        [Quantity2]: [9],[12]
        [Title]: [Orange],[Apple]
    [2010]
        [Quantity1]: [2],[10]
        [Quantity2]: [6],[2]
        [Title]: [Orange],[Apple]

在 VB 中,这非常简单。我会查看我的原始数据并重新调整我的数组以适应每个维度中的最大条目数。然后我会遍历数据并将其加载到...

如果 2012 年的索引 = 0,那么“Array(0,1,1)”将返回“9”

我相信这可以在 JSON 中完成,但我没有足够的经验知道如何操作。我希望这个问题足够具体,可以对我想要完成的工作提供一些见解。

------------------编辑和新代码------------------

感谢您的回答。

我意识到我目前的致命缺陷是我没有使用 JSON 构建我的二维数组(尽管我的示例看起来是这样)。这是我用来构建二维数组的方法:

for(i=0; i<titleArray.length; i++)
{
rowArray[i] = [yearArray[i], titleArray[i],quantityOneArray[i],quantityTwoArray[i]];
}

因为每个数组中总是有相同数量的条目,所以我可以可靠地使用一个数组的长度来遍历所有关联的数组。我也意识到使用“i++”是中学做事的方式,所以我愿意接受有关更优雅的索引方法的建议。

但是假设我想用 JSON 构建它?我相信这还不是 JSON 格式……如果是,那么我应该可以说“rowArray[i].year”是吗?

再次感谢 - 我很幸运有这样一个活跃的社区。​​p>

-------------------- EDIT2 & 新代码--------------------

好的,我想我破解了 JSON 问题。我喜欢你!我只需要稍微改变数组对象的格式,现在我可以使用 .whatever 属性来调用数组的成员!

for(i=0; i<titleArray.length; i++) 
{
rowArray[i] = {"year":yearArray[i], "title":titleArray[i],"quantity1":quantityOneArray[i],"quantity2":quantityTwoArray[i]};
console.log("rowArray["+i+"]: " + rowArray[i].year + ", " + rowArray[i].title +", "+rowArray[i].quantity1+", "+rowArray[i].quantity2);
}

现在是 3-D 阵列...

【问题讨论】:

    标签: jquery arrays json multidimensional-array


    【解决方案1】:

    JSON 对象的数据如下所示

    var data = 
    {
        "2011": {
            "Quantity1": [ 3, 7],
            "Quantity2": [ 5, 9],
            "Title": [
                "Orange",
                "Apple"
            ]
        },
        "2012": {
            "Quantity1": [ 4, 8],
            "Quantity2": [ 9, 12],
            "Title": [
                "Orange",
                "Apple"
            ]
        }, 
        ...
    }
    

    请注意,我在结构的前 2 层使用了一个对象,这样您就可以使用字符串对它们进行索引。例如,您的 Array(0,1,1) 将变为 data["2011"]["Quantity2"][1]

    或者你可以使用数组并拥有

    var data = 
    [
        [
            [ 3, 7],
            [ 5, 9],
            [ "Orange",
              "Apple" ]
        ],
        [
            [ 4, 8],
            [ 9, 12],
            [ "Orange",
                "Apple" ]
        ], 
        ...
    ]
    

    然后您可以执行data[0][1][1],这很像您的 VB 示例。

    【讨论】:

      【解决方案2】:

      应该这样做:

      var year_array = new Array(); // empty array
      for ( node in node_array )
      {
          if ( !year_array.hasOwnProperty(node.year) ) // if year is not in array yet
          {
              year_array[node.year] = new Array(); // create an empty array for it
          }
          year_array[node.year].push({
              "quantity1": node.quantity1,
              "quantity2": node.quantity2,
              "title": node.title,
          });
      }
      

      所有这一切都是通过 2D 数组,并将值以呈现的格式放入 3D 数组中。唯一棘手的是if ( !year_array.hasOwnProperty(node.year) ) 块,它会在每年的条目第一次出现时对其进行初始化。

      【讨论】:

      • 这看起来像门票......我也意识到我正在错误地构建我的数组以使用您的代码。我将在上面的编辑中添加我的例程。
      • 好的 - 出现意外的语法错误;希望我可以在这里获得示例代码:yearArray = {}; for(i=0; i&lt;rowArray.length; i++){ if(!yearArray.hasownProperty(rowArray[i].year){ yearArray[rowArray[i].year]={}; Uncaught SyntaxError: Unexpected token [ } yearArray[rowArray[i].year].quantity1+=rowArray[i].quantity1; yearArray[rowArray[i].year].quantity2+=rowArray[i].quantity2; yearArray[rowArray[i].year].title+=rowArray[i].title; } 请注意意外的令牌错误。我不相信我可以这样索引...
      • @Chris:尝试将yearArray = {}; 更改为var yearArray = new Array();
      • 嗯,没有变化。我试过yearArray = new Array()yearArray = []。我的直觉是我不能使用rowArray[i].year 作为yearArray 对象的索引值。让我们看看我是否尝试不同的方式......
      • 呃,我打错了;请注意if(!yearArray.hasownProperty(rowArray[i].year){ 语句中缺少结束括号。再下一个错误,然后我会看到我得到了什么!
      【解决方案3】:

      标准 JavaScript 与 VB 非常相似,如果您可以在 VB 中完成,对您来说应该不是问题。

      【讨论】:

      • 肯定有很多相似之处;数组是我发现的最显着的差异之一......也许及时我能够更彻底地理解它。
      猜你喜欢
      • 2021-03-07
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      相关资源
      最近更新 更多