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

       ] 
     } 
    ] 

}}); 

我想遍歷json字符串和實體名稱道奇和道奇復仇者。香港專業教育學院使用下面的方法連接字符串的正確方法是什麼?

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

但我認爲這不是它的正確的收作方法初探來連接,因爲它不wrking ..任何人都知道正確的格式?

+0

什麼是你希望在你的循環做最後一行? – Andrew

+0

我會提醒它,例如.. bt我應該得到實體道奇和道奇復仇者的價值提醒... – user1371896

+0

s將具有價值陽光從最後一行,並在最後一行,它應該附加價值陽光和獲取實體名稱。我想這個如果字符串包含多個元素,它會比jst陽光更多的值.. – user1371896

回答

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

那不是問題,因爲(var k in h.Division .oddTerms)會像在PHP中的foreach循環一樣,問題在於我將值Sunshine添加到'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中,您可以通過多種方式定義對象和數組,但最簡單的(也是許多開發人員最喜歡的)就是使用這些文字。

下面是一個對象的例子:

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

你可以看一下的myObj成員在幾個方面:

myObj.anotherProp // 「其他值」

myObj["some prop"] //你有如果屬性名稱中有空格,則使用此表單

要循環訪問數組的內容,請使用第二種形式。例如,這是不行的:

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

相關問題