0

Facebookから からデータを取得しており、子の値が xxx である内のobjectすべてを選択したいと考えています。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関数を使用しています。iterator 関数が返す配列filter内のエントリで構成される新しい配列を返します。指定した反復関数が返されるまで、配列をループします(早期に停止できるため、代わりに使用しました)。それらをまだ持っていない古いブラウザをサポートする必要がある場合、それらは「ES5 shim」が提供できるブラウザの 1 つです。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 に答える