简体   繁体   English

Javascript 嵌套 for 循环显示来自 JSON 对象数组的数据

[英]Javascript nested for loop displaying data from JSON objects array

I am taking data from a JSON file and using javascript so I can display it on a web page.我正在从 JSON 文件中获取数据并使用 javascript,以便我可以在网页上显示它。 The json file contains data on a movie cast. json 文件包含有关电影演员表的数据。 Each movie cast has a name, id and characters they play (some play more than one character).每个电影演员都有一个名字、id 和他们扮演的角色(有些扮演多个角色)。

"abridged_cast":[
                            {"name":"Tom Hanks","id":"162655641","characters":["Woody"]},
                            {"name":"Tim Allen","id":"162655909","characters":["Buzz Lightyear"]},
                            {"name":"Joan Cusack","id":"162655020","characters":["Jessie the Cowgirl"]},
                            {"name":"Ned Beatty","id":"162672460","characters":["Lots-o'-Huggin' Bear","Lotso"]},
                            {"name":"Don Rickles","id":"341817905","characters":["Mr. Potato Head"]}
                            ],

I want to display the cast on the web page as follows: Starring: Tom Hanks as Woody, Tim Allen as Buzz Lightyear, Joan Cusack as Jessie the Cowgirl, Ned Beatty as Lots-o'-Huggin' Bear & Lotso, Don Rickles as Mr. Potato Head.我想在网页上显示演员阵容如下: 主演:汤姆·汉克斯饰演伍迪,蒂姆·艾伦饰演巴斯光年,琼·库萨克饰演女牛仔杰西,内德·比蒂饰演Lot-o'-Huggin' Bear &lotso,唐·里克斯饰演土豆头先生。

What I am getting: Starring: Tom Hanks as & Woody, Tim Allen as & Buzz Lightyear, Joan Cusack as & Jessie the Cowgirl, Ned Beatty as Lots-o'-Huggin' Bear, & Lotso, Don Rickles as & Mr. Potato Head,我得到了什么: 主演:汤姆汉克斯和伍迪,蒂姆艾伦和巴斯光年,琼库萨克和女牛仔杰西,内德比蒂是抱抱熊,洛索,唐里克尔斯和马铃薯先生头,

I only want an "&" if the actor plays more than one character and between the last and second last characters.如果演员扮演多个角色并且在最后一个和倒数第二个角色之间,我只想要一个“&”。 Forr example: Starring: John as Tiger, Lion, Tree & Crow.例如: 主演:约翰饰演老虎、狮子、树和乌鸦。

I have spent ages trying to figure if out and I really cannot see what I am doing wrong.我花了很长时间试图弄清楚是否我真的看不出我做错了什么。 Here is my javascript:这是我的javascript:

$(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] + ', ');
                    }
            }
       }

Check for characters length and use indexes instead of comparing data检查字符长度并使用索引而不是比较数据

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 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>');
       }
   }

I've used arrays to concatenate the strings as I find them easier to work with.我使用数组来连接字符串,因为我发现它们更容易使用。 In the example in the fiddle I added an extra name to test for when there are more than two names in the character list.在小提琴的示例中,我添加了一个额外的名称来测试字符列表中是否有两个以上的名称。

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(''));

Or in your case:或者在你的情况下:

$(document.body).append(summary.join(''));

Output输出

Starring Tom Hanks as Woody, Tim Allen as Buzz Lightyear, Joan Cusack as Jessie the Cowgirl, Ned Beatty as Lots-o'-Huggin' Bear, Lotso & Boo-Boo , Don Rickles as Mr. Potato Head.汤姆·汉克斯饰演伍迪,蒂姆·艾伦饰演巴斯光年,琼·库萨克饰演女牛仔杰西,内德·比蒂饰演多抱抱熊,罗索和布-布,唐·里克斯饰演土豆头先生。

Fiddle小提琴

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在Javascript循环中显示JSON数据 - Displaying JSON data in Javascript loop 从 JSON 数据中循环遍历第一个数组中的多个对象,显示两个 arrays 与使用 FUNCTION 组件的 React 中的对象 - loop through multiple objects inside the first array from JSON data displaying two arrays with objects in React using FUNCTION COMPONENT 提取 JSON 中的特定嵌套数组 与 Javascript 匹配数据的对象 - Extract specific nested array in JSON Objects that match data with Javascript 显示来自 JSON 响应的嵌套对象 - Displaying nested objects from JSON response json数据从_body中提取嵌套对象 - Javascript - json data extract nested objects from _body - Javascript 嵌套对象数组 Javascript 中的 forEach 循环 - forEach loop in nested array of objects Javascript 循环遍历 javascript 中的嵌套对象数组 - Loop through an array of nested objects in javascript 从 Javascript 中嵌套数组内的对象中过滤数据的最佳方法 - Best way to filter data from objects inside nested array in Javascript 如何从 JavaScript 中的嵌套对象数组中获取选择性数据 - How to get the selective data from the array of nested objects in JavaScript 如何使用javascript将json数据格式从数组更改为对象数组? - How to change json data format from array to array of objects with javascript?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM