0

VBが恋しいです。悲しいことなのかな…

次のデータを表す「3 次元」配列を作成する必要があります。データは XML として始まり、次のように 2D の「配列の配列」に解析されます (わかりやすくするために記述子が追加されています)。

[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 次元配列を 3 次元オブジェクト配列に解析したいと考えています。

[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 を使用して 2 次元配列を構築していないことです (私の例はそのように見えますが)。2次元配列を構築するために私が使用している方法は次のとおりです。

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

各配列には常に同じ数のエントリがあるため、1 つの配列の長さを確実に使用して、関連するすべての配列を反復処理できます。また、「i++」の使用は中学生のやり方であることも認識しているため、より洗練されたインデックス作成方法に関する提案を歓迎します。

しかし、これを JSON で構築したいとしましょう。これはまだ JSON 形式ではないと確信しています... もしそうなら、「rowArray[i].year」と言えますか?

改めて感謝します。このような活発なコミュニティを持つことができて、とても幸運です。

--------------------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次元配列について...

4

3 に答える 3

2

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 の例とよく似た方法を実行できます。

于 2012-08-15T14:46:16.013 に答える
1

このような何かがそれを行う必要があります:

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) )ブロックで、毎年のエントリが最初に表示されるときに初期化されます。

于 2012-08-15T14:44:25.557 に答える
0

標準の JavaScript は VB と非常によく似ています。VB でそれを行うことができれば、問題にはなりません。

于 2012-08-15T14:44:44.570 に答える