2012-05-03 6 views
0
var d=getEntity({"Division": 
{ 
"oddTerms": 
    [   
     { 
       "entity": "Sunshine", 
       "Sunshine": [ 
        { 
         "count": 2, 
         "entity": "Dodge" 
        }, 
        { 
         "count": 1, 
         "entity": "Dodge Avenger" 
        }, 

       ] 
     } 
    ] 

}}); 

私はjson文字列とエンティティ名Dodge and Dodge Avengerを通過したいと思っています。アイブ氏は次のような方法文字列を連結する正しい方法は何ですか?

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

を使用しかし、私はこのその正しくないmethdはそれがwrkingされていないよう...誰が正しい形式を知って連結すると思いますか?

+0

を期待していますか? – Andrew

+0

私はそれを例にして警告します。btエンティティDodgeとDodge Avengerの値を警告する必要があります。 – user1371896

+0

は2番目の最後の行と最後の行の値に日照を持ちます。エンティティ名を取得します。文字列に複数の要素が含まれている場合、jst sunshineよりも多くの値を持つことになります。 – user1371896

答えて

1

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

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; 
    } 
} 
+0

それは問題ではありません。(var k in h.Division .oddTerms)wil wrk phpのforeachループのように、問題は、変数hを値 'h.Division.oddTerms [k]。+ s + .entity;'に追加する方法です。 – user1371896

+0

うん、編集しましたコード – chiborg

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では、さまざまな方法でオブジェクトと配列を定義できますが、最も簡単な(そして最も望ましいのは、多くの開発者が)これらのリテラルを使用しています。

ここでは、オブジェクトの例です:

myObj.anotherProp // "別の値を" あなたが持っている

myObj["some prop"] //:あなたはいくつかの方法でmyObjのメンバーを検索することができます

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

プロパティ名にスペースがある場合にこのフォームを使用する

配列の内容をループするには、 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":[]} 
+0

これはwrk、btを行います。文字列連結の詳細を知りたいのですが... – user1371896

+0

私はあなたを助けるためにここにいくつかを追加します。 – Andrew

関連する問題