Json数组循环使用javascript输出错误

时间:2014-04-03 13:09:17

标签: javascript arrays json

我从类似如下的JSON数组中提取数据:

"abridged_directors": [{
            "name": "Bill",
            "id": "742790769",
            "characters": ["Flint Lockwood"]
        }, {
            "name": "Anna",
            "id": "162654477",
            "characters": ["Sam Sparks"]
        }, {
            "name": "James",
            "id": "162656402",
            "characters": ["Tim Lockwood"]
        }, {
            "name": "Will",
            "id": "770670480",
            "characters": ["Chester V"]
        }, {
            "name": "Kristen",
            "id": "770792145",
            "characters": ["Barb"]
        }],

我正在使用循环来正确显示结果。 我在寻找的是: 比尔,安,詹姆斯,威尔&克里斯汀

相反,我得到: 比尔,安,詹姆斯,威尔,&克里斯汀

对于第二个姓氏,我想要一个逗号,以下if else语句应该涵盖但是它似乎不起作用?

for (var i = 0;i < data.abridged_directors.length; i++){
            if(i != 0 && i == data.abridged_directors.length-1){
                // and the position of the character is greater than 0
                $(document.body).append('& ' + data.abridged_directors[i].name + '<br>');
            }
            else if(i != data.abridged_directors.length-1 || i != data.abridged_directors.length-2){
                 $(document.body).append(data.abridged_directors[i].name + ', ');
            }
            else
                $(document.body).append(data.abridged_directors[i].name + '<br>');


   }

我现在一直在看这个并且做出改变但似乎没有任何效果。如果结果是这样的话,那可能是我看不到的小事。

4 个答案:

答案 0 :(得分:1)

如果您只支持IE9 +,那么您可以使用地图执行此操作。这里的关键是职责分离。它使它更容易理解。如果您需要IE9支持,那么您可以使用for循环执行此操作。请参阅ezekielDFM的解决方案。

[编辑包含ezekielDFM正则表达式命令 - 更清洁的解决方案]

伪代码:

  1. 首先构建您的数据(地图命令)
  2. 格式化数据(加入命令)
  3. 修复格式化(替换命令)
  4. 的Javascript

    var string_directors = data.abridged_directors
      .map(function(director) {
         return director.name; 
      })
      .join(', ')
      .replace(/(.*),(.*)$/, '$1 & $2');
    

答案 1 :(得分:1)

我想提供一个更清洁的方法(imho)。而不是循环和追加,尝试加入一个名称数组,只需替换最后一个逗号。见代码:

var names = [];

for (var i = 0;i < data.abridged_directors.length; i++)
{
     names.push(data.abridged_directors[i].name);
}

$(document.body).append(names.join(', ').replace(/(.*),(.*)$/, "$1 & $2"));

这是一个jsfiddle:http://jsfiddle.net/zYdH9/

答案 2 :(得分:0)

||中的else if应为&&

答案 3 :(得分:0)

我知道你得到了答案,但我花了一些时间来解决... kkk 希望能帮助别人:

$(json).each(function(i){  
    $("#result").append(this.name);
    if(j-2 == i)
        $("#result").append(" & ");
    else{
        if(!(j-1 == i))
        $("#result").append(", ");}
});

http://jsfiddle.net/Z5L4E/