2013-03-13 107 views
0

我從Facebook獲取來自object的數據,並且想要選擇子項值爲xxx的array中的所有objects通過兒童數組和對象值選擇對象

object(簡化當然)的結構是這樣的:

var friends = [ 
    { 
     id: 123456, 
     name: "Friend1 name", 
     education: [ 
      { 
       school: { 
        name: "School1 name" 
       }, 
       type: "Highscool" 
      } 
     ] 
    }, 
    { 
     id: 3456789, 
     name: "Friend2 name", 
     education: [ 
      { 
       school: { 
        name: "School2 name" 
       }, 
       type: "College" 
      } 
     ] 
    } 
] 

讓我們假設我想用education.type =「Highscool」的所有對象。我怎麼能做到這一點,沒有循環,雖然整個對象...?

+0

我不知道這是可能沒有某種循環 –

+0

的我affraid的是...: -/ –

+0

有多少元素可以'教育「有?我們應該只檢查第一個「教育[0]」嗎? – dfsq

回答

1

我該如何做到這一點,沒有循環雖然整個對象...?

你不行。不過,這並不必須是硬:

var highSchoolFriends = friends.filter(function(friend) { 
    var keep = false; 
    friend.education.some(function(entry) { 
     if (entry.type === "Highschool") { 
      keep = true; 
      return true; 
     } 
    }); 
    return keep; 
}); 

使用了ES5 Array#filterArray#some功能。 filter返回由friends數組中的條目組成的新數組,迭代器函數返回truesome循環遍歷一個數組,直到你給出的迭代函數返回true(我用它代替了Array#forEach,因爲你可以儘早停止它)。如果你需要支持那些還沒有的瀏覽器,那麼它們就是「ES5墊片」能給你的那些瀏覽器。

,或者你只是做了簡單的循環:

var i, j; 
var highSchoolFriends = []; 
var friend; 

for (i = 0; i < friends.length; ++i) { 
    friend = friends[i]; 
    for (j = 0; j < friend.education.length; ++j) { 
     if (friend.education[j].type === "Highschool") { 
      highSchoolFriends.push(friend); 
      break; 
     } 
    } 
}); 
+0

謝謝您的回覆。這並不難,但我的朋友名單很大,而且該應用程序適用於手機,所以我希望不要做太多循環。但我想沒有別的辦法......謝謝你的時間。 –

+0

@KennethB:不用擔心,希望有所幫助。 –