这就是我的数据......
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);
我如何获得所有朋友的实例,包括朋友的朋友?
答案 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