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"]// 如果属性名称中有空格,则必须使用此表单

要遍历数组的内容,请使用第二种形式。例如,这不起作用:

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 回答