0

我正在object从 Facebook 获取数据,并希望选择所有子值为 xxx 的objectsarray

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" 获取所有对象。我怎样才能做到这一点,而不循环整个对象......?

4

1 回答 1

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;
});

那使用 ES5Array#filterArray#some函数。返回由迭代器函数为其filter返回的数组中的条目组成的新数组。循环遍历一个数组,直到你给的迭代函数返回(我使用它而不是因为你可以提前停止它)。如果您需要支持还没有这些的旧浏览器,它们是“ES5 shim”可以为您提供的浏览器。friendstruesometrueArray#forEach

或者你只做简单的循环:

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;
        }
    }
});
于 2013-03-13T09:12:39.747 回答