Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json数组使用javascript循环获得错误输出_Javascript_Arrays_Json - Fatal编程技术网

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

Json数组使用javascript循环获得错误输出,javascript,arrays,json,Javascript,Arrays,Json,我从JSON数组中提取数据,如下所示: "abridged_directors": [{ "name": "Bill", "id": "742790769", "characters": ["Flint Lockwood"] }, { "name": "Anna", "id": "162654477", "characters": ["S

我从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>');


   }
for(var i=0;i');
}
else if(i!=data.abrided_directors.length-1 | | i!=data.abrided_directors.length-2){
$(document.body).append(data.abred_directors[i].name+,');
}
其他的
$(document.body).append(data.abred_directors[i].name+'
'); }

我已经看了很长一段时间了,并且做了一些改变,但似乎没有任何效果。这可能是一些我没有看到的小东西,如果事实证明是这样的话,那么很抱歉

如果
中的
|
应该是
&&
如果您只支持IE9+,那么您可以使用映射来执行此操作。这里的关键是职责分离。这使它更容易理解。如果您需要IE9支持,那么您可以使用for循环来实现这一点。见以西结的解决方案

[编辑后包含ezekielDFM regex命令-更干净的解决方案]

伪代码:
  • 首先构建数据(map命令)
  • 格式化数据(join命令)
  • 固定格式(替换命令)
  • Javascript
    我想提供一个更干净的方法(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"));
    
    var name=[];
    对于(var i=0;i

    这里有一个jsfiddle:

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

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

    正则表达式做得很好。这些天来,我在编码时尽量避免条件和循环。最后的正则表达式解决方案非常优雅。
    $(json).each(function(i){  
        $("#result").append(this.name);
        if(j-2 == i)
            $("#result").append(" & ");
        else{
            if(!(j-1 == i))
            $("#result").append(", ");}
    });