94

オブジェクトの配列があり、それを検索する最良の方法を考えています。以下の例を考えると、どのようにname = "Joe"andを検索できage < 30ますか? jQueryが役立つものはありますか、それともこの検索を自分でブルートフォースする必要がありますか?

var names = new Array();

var object = { name : "Joe", age:20, email: "joe@hotmail.com"};
names.push(object);

object = { name : "Mike", age:50, email: "mike@hotmail.com"};
names.push(object);

object = { name : "Joe", age:45, email: "mike@hotmail.com"};
names.push(object);
4

8 に答える 8

144

以下を備えた最新のソリューションArray.prototype.filter():

const found_names = names.filter(v => v.name === "Joe" && v.age < 30);

または、まだjQueryを使用している場合は、次を使用できますjQuery.grep()

var found_names = $.grep(names, function(v) {
    return v.name === "Joe" && v.age < 30;
});
于 2012-11-27T23:04:38.400 に答える
81

[].filter次のメソッドを使用すると、これを非常に簡単に行うことができます。

var filterednames = names.filter(function(obj) {
    return (obj.name === "Joe") && (obj.age < 30);
});

詳細については、この MDN ページを参照してください。

于 2012-11-27T23:05:52.397 に答える
9

jQuery.filter()関数を利用して、一致する要素のサブセットから要素を返すことができます。

var names = [
    { name : "Joe", age:20, email: "joe@hotmail.com"},
    { name : "Mike", age:50, email: "mike@hotmail.com"},
    { name : "Joe", age:45, email: "mike@hotmail.com"}
   ];
   
   
var filteredNames = $(names).filter(function( idx ) {
    return names[idx].name === "Joe" && names[idx].age < 30;
}); 

$(filteredNames).each(function(){
     $('#output').append(this.name);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="output"/>

于 2014-09-26T07:50:32.420 に答える