访问数组

时间:2016-04-09 04:08:48

标签: javascript arrays

这就是我的数据......

var data = [ 
    {
        name: 'Bart',
        grade: 4,
        teacher: 'Krabappel',
        record: ['Set fire to skinner','Threw poop at Milhouse'],
        friends: [
                {
                    name: 'Milhouse',
                    grade: 4,
                    teacher: 'Krabappel',
                    record: ['Sang songs', 'Reads loudly'],
                    friends: 
                            { 
                                name: 'Martin',
                                grade: 4,
                                teacher: 'Krabappel',
                                record: 'NONE',
                                friends: 'NONE'
                            }

                },
                {
                    name: 'Nelson',
                    grade: 4,
                    teacher: 'Krabappel',
                    record: ['Burnt classroom','Stole skinners car','Beat up Milhouse'],
                    friends: 'NONE'
                }
            ]
    }
    //{name: 'Lisa'}, 
    //{name: 'Maggie'} 
];

我试图抓住所有朋友的实例并记录下来。

function getFriends(data) {
    data.map(function (n) {
        var frands = n.friends; // works!
        var fof = frands.friends; // does not work
        console.log(frands);
        console.log(fof); 
    });
}

getFriends(data);

我如何获得所有朋友的实例,包括朋友的朋友?

2 个答案:

答案 0 :(得分:1)

它因为它上面有更多的数组,所以使用for循环就可以了

function getFriends(data) {
    data.map(function (n) {
        var frands = n.friends; // works!
        for(var i =0;i <frands.length;i++){
        var fof = frands[i].friends; 
        console.log(fof); 
        }

        console.log(frands);
    });
}

答案 1 :(得分:1)

这需要一些递归。

var allFriends = []; //global to store unique friend objects

for(var i = 0; i < data.length; i++){
    if(data[i].friends != null){
        getAll(data[i].friends);
    }
}

function found(friend){
   for(var i = 0; i < allFriends.length; i++){
      if(allFriends[i].name == friend.name){
        return true;
      }
   }
   return false;
}

function getAll(friends){
   if(friends != null){
       for(var i = 0; i < friends.length; i++){
          if(!found(friends[i])){
             var friendcopy = friends[i];
             if(friendcopy.friends != null){
                delete friendcopy.friends;
                 getAll(friends[i].friends);
             }
             allFriends.push(friendcopy);
          }
       }
   }
}

这将存储数据数组中找到的所有唯一朋友。第一个函数检查朋友是否已经在全局变量allFriends内,如果没有,那么递归函数将继续无限扫描,直到所有数据元素都用完为止。递归完成后,allFriends应该包含所有朋友对象。

如果data

中有大量项目,此类功能可能会出现问题