【问题标题】:return arrays along with sub arrays in javascript在javascript中返回数组和子数组
【发布时间】:2016-02-11 04:14:11
【问题描述】:

没有显示带有子数组的数组循环。友善的建议。我能够显示第一个数组集,但无法显示每个集的子数组。

var json = [{
"Friends":[
    {
        'image'     : '_assets/images/users/01.jpg',
        'unread'    : '22',
        'name'      : 'Salman Razak',
        'message'   : 'way to be happy...',
        'lastchat'  : '16th Feb 2015 | 9:30 pm'
    },
    {
        'image'     : '_assets/images/users/02.jpg',
        'unread'    : '22',
        'name'      : 'Shahid Saeed',
        'message'   : 'way to be happy...',
        'lastchat'  : '16th Feb 2005 | 9:30 pm'
    }
],
"Colleagues":[
    {
        'image'     : '_assets/images/users/02.jpg',
        'unread'    : '22',
        'name'      : 'Hyder Memon',
        'message'   : 'way to be happy...',
        'lastchat'  : '16th Feb 2015 | 9:30 pm'
    }
]
}];

$.each(json, function () {
   $.each(this, function (name, value) {
      console.log(name + '=' + value);
      $('ul').append('<li>'+ name + ', ' + json[name].join() +'</li>');
   });
});

【问题讨论】:

  • 预期输出是什么?
  • 联系人后端数据循环,联系人分组,如朋友、同事等。根据数组中填写的数据我要对联系人进行分类。
  • 为什么json 是一个数组?
  • 你有一个数组,它有一个对象,它有一个 Friends 和一个 Colleagues 属性,它们本身就是数组。然而,您似乎认为您有一个数组数组。
  • 您必须嵌套另一个迭代。现在,您正在迭代由数组保存的对象。您需要迭代由数组持有的对象的属性持有的数组。

标签: javascript jquery arrays loops


【解决方案1】:

这是一个适用于您拥有的数据结构的循环 (working jsbin)

json.forEach(function(item){
    for(var group in item){
        if(item.hasOwnProperty(group)){
            var groupItems = item[group];
            groupItems.forEach(function(person){
                console.log(group, person.name);
            });
        }
    }
});

【讨论】:

  • 朋友循环重复 2 次,我可以将其显示为 1 和近 20 个子项
  • 不确定我是否理解您的问题,此循环专门针对您在问题中发布的数据结构,并且在 jsbin 中运行良好。你能详细说明你的意思吗?
  • 我的第一个数组“friends”有两个子数组 Salman razak 和 shahid saeed,在上面的下一个循环中,由于两个子数组,我得到了两次 wordfriends 如果它显示朋友作为父母和孩子两者的联系。希望你能理解
  • 哦,对了,我想我明白你的意思了。你得到了两次“朋友”的工作,因为我正在记录他们所在的“组”——console.log(group, person.name); 在这一行中,变量group 是他们所属的组的名称,如果你不需要使用它不想要,但我想表明它对您可用。
【解决方案2】:

试试这个

   for (var i = 0, j = json.length; i < j; i++) {
    Object.keys(json[i]).forEach(function(elem, index, arr){
        for (var k = 0; k < json[i][elem].length; k++) {
            console.log(json[i][elem][k].image); 
            console.log(json[i][elem][k].unread);   
            console.log(json[i][elem][k].name);
            console.log(json[i][elem][k].message);
            console.log(json[i][elem][k].lastchat);
        }
    });
   }

// THIS LINE TO ITERATE THE MAIN ARRAY 'JSON'
for (var i = 0, j = json.length; i < j; i++) {

// THIS LINE TO GET KEYS OF json[i]......(Friends AND Colleagues FOR FIRST ELEMENT OF json)
Object.keys(json[i]).forEach(function(elem, index, arr){ 

//EACH KEY IS ANY ARRAY. THIS LINE TO ITERATE THE ELEMENTS OF EACH KEY
for (var k = 0; k < json[i][elem].length; k++) {

【讨论】:

  • 不要使用 for 循环,它们会引入不必要的复杂性。请改用forEach
  • 感谢 intekhab 你救了我的一天。它工作得很好
  • @RayonDabre 在几乎所有情况下。有一些特殊情况,但这绝对不是一种情况。
  • 根据我的类别,我正在获取联系人的数据以及在
        • 中显示它们的类别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
相关资源
最近更新 更多