用于显示JSON对象数组中数据的循环的Javascript嵌套
我从一个JSON文件中获取数据,并使用javascript将其显示在网页上。json文件包含关于电影演员的数据。每个电影演员都有一个名字、id和他们扮演的角色(有些人扮演不止一个角色) 我想在网页上显示演员阵容,如下所示: 主演:汤姆·汉克斯饰演伍迪,蒂姆·艾伦饰演巴斯光年,琼·库萨克饰演牛仔杰西,内德·比蒂饰演洛兹·哈金熊和洛索,唐·里克斯饰演土豆头先生 我得到的是: 主演:汤姆·汉克斯饰演伍迪、蒂姆·艾伦饰演巴斯光年、琼·库萨克饰演牛仔杰西、内德·比蒂饰演洛兹·哈金熊、洛索、唐·里克斯饰演土豆头先生、 我只想要一个“&”,如果演员扮演多个角色,并且介于最后一个和第二个角色之间。例如: 主演:约翰扮演老虎、狮子、树和乌鸦 我花了很长时间试图弄清楚,我真的看不出我做错了什么。以下是我的javascript:用于显示JSON对象数组中数据的循环的Javascript嵌套,javascript,arrays,json,object,Javascript,Arrays,Json,Object,我从一个JSON文件中获取数据,并使用javascript将其显示在网页上。json文件包含关于电影演员的数据。每个电影演员都有一个名字、id和他们扮演的角色(有些人扮演不止一个角色) 我想在网页上显示演员阵容,如下所示: 主演:汤姆·汉克斯饰演伍迪,蒂姆·艾伦饰演巴斯光年,琼·库萨克饰演牛仔杰西,内德·比蒂饰演洛兹·哈金熊和洛索,唐·里克斯饰演土豆头先生 我得到的是: 主演:汤姆·汉克斯饰演伍迪、蒂姆·艾伦饰演巴斯光年、琼·库萨克饰演牛仔杰西、内德·比蒂饰演洛兹·哈金熊、洛索、唐·里克斯饰演土
$(document.body).append('<strong>Starring:</strong> ');
for (var i = 0;i < movie.abridged_cast.length; i++){
$(document.body).append(movie.abridged_cast[i].name + " as ");
for (var j = 0; j < movie.abridged_cast[i].characters.length; j++){
if(movie.abridged_cast[i].characters[j] == movie.abridged_cast[i].characters[movie.abridged_cast[i].characters.length -1]
// if the character = the character in the last position
&& movie.abridged_cast[i].characters[j].length -1 > 0){
// and the position of the character is greater than 0
$(document.body).append('& ' + movie.abridged_cast[i].characters[j] + ', ');
}
else {
$(document.body).append(movie.abridged_cast[i].characters[j] + ', ');
}
}
}
$(document.body).append(“星号:”);
for(var i=0;i0){
//并且字符的位置大于0
$(document.body).append('&'+movie.abred_cast[i].characters[j]+',');
}
否则{
$(document.body).append(movie.abred_cast[i].characters[j]+',');
}
}
}
检查字符长度并使用索引而不是比较数据
for (var j = 0; j < movie.abridged_cast[i].characters.length; j++){
// if more than 1 character
if(movie.abridged_cast[i].characters.length>1
// and it is the last character in array
&& j == movie.abridged_cast[i].characters.length-1){
$(document.body).append('& ' + movie.abridged_cast[i].characters[j] + ', ');
}
else {
$(document.body).append(movie.abridged_cast[i].characters[j] + ', ');
}
}
for(var j=0;j1
//它是数组中的最后一个字符
&&j==电影。演员简介[i]。角色。长度-1){
$(document.body).append('&'+movie.abred_cast[i].characters[j]+',');
}
否则{
$(document.body).append(movie.abred_cast[i].characters[j]+',');
}
}
用于(变量i=0;i0){
$(document.body).append(movie.abred_cast[i].name+“as”);
$(document.body).append(movie.abred_cast[i].characters[0]);
如果(电影.节选演员[i].characters.length>1){
for(var j=1;j”);
}
}
我使用数组来连接字符串,因为我发现它们更容易使用。在fiddle中的示例中,我添加了一个额外的名称,以在字符列表中有两个以上的名称时进行测试
var summary = ['Starring '];
for (var i = 0, l = data.length; i < l; i++) {
var txt = [], name = data[i].name, chars = data[i].characters;
txt.push(name + ' as ');
if (chars.length > 2) {
txt.push(chars.slice(0, chars.length - 1).join(', '));
txt.push(' & ' + chars.pop());
} else {
txt.push(chars.join(', '));
}
txt = txt.join('');
if (i < data.length - 1) {
summary.push(txt + ', ');
} else {
summary.push(txt + '.');
}
}
console.log(summary.join(''));
输出
主演汤姆·汉克斯饰演伍迪,蒂姆·艾伦饰演巴斯光年,琼·库萨克饰演牛仔杰西,内德·比蒂饰演洛兹·哈金熊,洛索和波波饰演土豆头先生
for (var i = 0;i < movie.abridged_cast.length; i++){
if ( movie.abridged_cast[i].characters.length > 0 ) {
$(document.body).append(movie.abridged_cast[i].name + " as ");
$(document.body).append(movie.abridged_cast[i].characters[0]);
if ( movie.abridged_cast[i].characters.length > 1 ) {
for (var j = 1; j < movie.abridged_cast[i].characters.length-1; j++){
$(document.body).append(', ' + movie.abridged_cast[i].characters[j]);
}
$(document.body).append(' & ' + movie.abridged_cast[i].characters[movie.abridged_cast[i].characters.length-1]);
}
$(document.body).append('<br>');
}
}
var summary = ['Starring '];
for (var i = 0, l = data.length; i < l; i++) {
var txt = [], name = data[i].name, chars = data[i].characters;
txt.push(name + ' as ');
if (chars.length > 2) {
txt.push(chars.slice(0, chars.length - 1).join(', '));
txt.push(' & ' + chars.pop());
} else {
txt.push(chars.join(', '));
}
txt = txt.join('');
if (i < data.length - 1) {
summary.push(txt + ', ');
} else {
summary.push(txt + '.');
}
}
console.log(summary.join(''));
$(document.body).append(summary.join(''));