通过儿童数组和对象值选择对象
我从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”的所有对象。我怎么能做到这一点,没有循环,虽然整个对象...?
我该如何做到这一点,没有循环虽然整个对象...?
你不行。不过,这并不必须是硬:
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;
}
}
});
谢谢您的回复。这并不难,但我的朋友名单很大,而且该应用程序适用于手机,所以我希望不要做太多循环。但我想没有别的办法......谢谢你的时间。 –
@KennethB:不用担心,希望有所帮助。 –
我不知道这是可能没有某种循环 –
的我affraid的是...: -/ –
有多少元素可以'教育“有?我们应该只检查第一个“教育[0]”吗? – dfsq