オブジェクトの配列内で一致するオブジェクトを検索しますか? 質問する

オブジェクトの配列内で一致するオブジェクトを検索しますか? 質問する
var set = [{"color":"blue"},{"color":"green"},{"color":"red"},{"color":"green"}];

set.find({"color":"green"})db 呼び出しのような処理を実行し、そのプロパティを含むオブジェクトで満たされた配列を返すようにしたいと思います。

ベストアンサー1

使用Array#filterこの場合、コードは次のようになります。

var results = set.filter(function (entry) { return entry.color === "green"; });

Array#filter古いブラウザでは実装されていないので、リンクされた記事を参照して下位互換性シムを入手するか、本格的なES5シム

より一般的なケースでは、このアイデアを拡張するだけです。

function findByMatchingProperties(set, properties) {
    return set.filter(function (entry) {
        return Object.keys(properties).every(function (key) {
            return entry[key] === properties[key];
        });
    });
}

var results = findByMatchingProperties(set, { color: "green" });

ここでもECMAScript 5メソッドを使用していますObject.keysそしてArray#everyなので、ES5 shim を使用します。(このコードは ES5 shim がなくても実行可能ですが、手動ループを使用するため、記述や読み取りがあまり楽しくありません。)

おすすめ記事