我从类似如下的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>');
}
我现在一直在看这个并且做出改变但似乎没有任何效果。如果结果是这样的话,那可能是我看不到的小事。
答案 0 :(得分:1)
如果您只支持IE9 +,那么您可以使用地图执行此操作。这里的关键是职责分离。它使它更容易理解。如果您需要IE9支持,那么您可以使用for循环执行此操作。请参阅ezekielDFM的解决方案。
[编辑包含ezekielDFM正则表达式命令 - 更清洁的解决方案]
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(", ");}
});