2012-05-03 96 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

相关问题