按子数组和对象值选择对象

时间:2013-03-13 09:11:00

标签: javascript jquery

我从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”获取所有对象。我怎么能这样做,而不是循环整个对象......?

1 个答案:

答案 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#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;
        }
    }
});