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 엔티티 닷지와 닷지 보너스의 가치를 알려야합니다 ... – user1371896

+0

두 번째 마지막 행의 값 햇빛이 있고 마지막 행의 값 햇빛이 추가되어야합니다. 엔티티 이름을 가져옵니다. 문자열에 둘 이상의 요소가 포함되어 있으면 jst 햇빛보다 많은 값을 갖습니다.이 코드는 사용하려고합니다. – user1371896

답변

1

oddTerms은 개체가 아니라 배열입니다. 자바 스크립트에서 배열의 대신 요소를 통해 반복의 카운터 루프를 사용할 필요가 :

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.Division.oddTerms [k]. + s + .entity;'값에 Sunshine 값을 추가하는 방식입니다. – 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

관련 문제