我从Facebook的object
获取数据,并希望在objects
中选择子值为xxx的所有array
。
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 :(得分: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#filter
和Array#some
函数。 filter
返回一个新数组,该数组由friends
数组中的条目组成,迭代器函数返回true
。 some
循环遍历一个数组,直到你给出的迭代函数它返回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;
}
}
});