0
var d=getEntity( {"Division": 
{
"oddTerms": 
    [           
        {
              "entity": "Sunshine",
              "Sunshine": [
                    {
                         "count": 2,
                        "entity": "Dodge"
                    },
                    {
                        "count": 1,
                        "entity": "Dodge Avenger"
                    },

              ]
        }
  ]

}});

JSON 文字列と Dodge および Dodge Avenger というエンティティ名をトラバースしたいと考えています。次の方法を使用しました

for (var k in h.Division.oddTerms)
{
s=h.Division.oddTerms[k].entity;
h.Division.oddTerms[k].+s+.entity;
}

しかし、これはうまくいかないので、連結する正しい方法ではないと思います..誰もが正しいフォーマットを知っていますか?

4

2 に答える 2

1

oddTermsオブジェクトではなく配列です。JavaScript の配列の場合、要素を反復処理する代わりに、カウンタを使用して for ループを使用する必要があります。

var concatedString = '';
for (var k=0; k<h.Division.oddTerms.length;k++)
{
    // Get the name of the entity we want to collect the entity terms of
    var entityName =h.Division.oddTerms[k].entity;
    // iterate through all the instances of each entity
    for(var j=0; j<h.Division.oddTerms[k][entityName].length;j++){
      concatedString += h.Division.oddTerms[k][entityName][j].entity;
    }
}
于 2012-05-03T13:55:10.030 に答える
0
var entityName = "",
    arrTerms = [],
    outputTemplate = '{"%entityName":[%terms]}',
    h = {
        "Division":
        {
            "oddTerms":
            [
                {
                    "entity": "Sunshine",
                    "Sunshine": [
                    {
                        "count": 2,
                        "entity": "Dodge"
                    },
                    {
                        "count": 1,
                        "entity": "Dodge Avenger"
                    },

                    ]
                }
            ]

        }
    };

for (var i = 0; i <  h.Division.oddTerms.length; i++)
{
    entityName=h.Division.oddTerms[i].entity; // "Sunshine"
    terms = h.Division.oddTerms[i][entityName];

    for (var j = 0; j < terms.length; j++) {
        arrTerms.push('"' + terms[j].entity + '"');
    }
}

// This will give you '{"Sunshine":["Dodge","Dodge Avenger"]}':
console.log(outputTemplate.replace('%entityName', entityName).replace('%terms', arrTerms.join(",")));

編集:

これについてもう少し。

JS およびオブジェクトと配列の「リテラル」の操作に慣れていない場合、JSON の操作は少し混乱する可能性があります。JS では、さまざまな方法でオブジェクトと配列を定義できますが、最も簡単な (そして多くの開発者に最も好まれている) 方法は、これらのリテラルを使用することです。

オブジェクトの例を次に示します。

var myObj = {
    "some prop":"some value",
    "anotherProp":"another value"
}

のメンバーを検索するにはmyObj、いくつかの方法があります。

myObj.anotherProp// 「別の値」

myObj["some prop"]// プロパティ名にスペースが含まれている場合は、この形式を使用する必要があります

配列の内容をループするには、2 番目の形式を使用します。たとえば、これは機能しません。

for (var strPropName in myObj) {
   console.log(myObj.strPropName); // This won't work!
}

代わりに、次のようにプロパティをループする必要があります。

for (var strPropName in myObj) {
    if (myObj.hasOwnProperty(strPropName)) {
       console.log(myObj[strPropName]);
    }
}

このifブロックはオプションですが、これを常にコードに含めると、潜在的な問題を回避できます。一部のバリデーターでも必要です。

次に、配列の例を示します。

var myArray = ["some value", "anotherValue"];

数値インデックスを使用してこれらにアクセスします。

myArray[0] // "some value"
myArray[1] // "anotherValue"
myArray[2] // undefined

そして、それらをループできます:

for (var index = 0; index < myArray.length; index++) {
    console.log(myArray[index]);
}

配列内にオブジェクトをネストできます。

myArray = [{},{},{}];

また、オブジェクト内に配列をネストできます。

myObject = {"arr1":[], "arr2":[], "arr3":[]}
于 2012-05-03T14:14:58.423 に答える