2012-11-27 9 views
63

私はオブジェクトの配列を持っており、それを検索する最良の方法が不思議です。以下の例では、name = "Joe"age < 30をどのように検索できますか? jQueryが助けることができるものがありますか?または私はこの検索を自分で強制する必要がありますか?あなたがする必要がありますオブジェクトのjavascriptフィルタ配列

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

var found_names = $.grep(names, function(v) { 
    return v.name === "Joe" && v.age < 30; 
}); 

DEMO:http://jsfiddle.net/ejPV4/

+0

を使用することができますか? – joragupra

答えて

91

あなたはjQuery.grep()を使用することができます追加する[].filterメソッドをサポートしていないブラウザのシム:this MDN pageはそのようなコードを与えます。

+2

非常に滑らかです!大好きです。 – user441521

+0

working great ... –

64

あなたが[].filter方法で非常に簡単にこれを行うことができます

var names = new Array(); 

var object = { name : "Joe", age:20, email: "[email protected]"}; 
names.push(object); 

object = { name : "Mike", age:50, email: "[email protected]"}; 
names.push(object); 

object = { name : "Joe", age:45, email: "[email protected]"}; 
names.push(object); 
+0

私はリンクされたMDNページのpolyfillを見てみることをお勧めします。 – Nobita

0

すぐに質問があります。 2つのオブジェクト配列があり、これらのオブジェクト配列を「整列」して、各配列のオブジェクトが他の配列の順番どおりになるようにしたい場合はどうなりますか?配列の中のどのオブジェクトにどのようなキーと値が含まれているのかわからない場合...どんな順序で配列されているのでしょうか?

[].filter[].mapなどには「ワイルドカード式」が必要です。ワイルドカード式はどのように取得しますか?また、あなたのオブジェクトのそれぞれのキーのすべてのためのより良い集団式を作成するために、各オブジェクトの反復処理を介してこの機能を使用して、あなたの配列そのようにフィルタリングすることができ

var jux = (function(){ 
    'use strict'; 

    function wildExp(obj){ 
     var keysCrude = Object.keys(obj), 
      keysA = ('a["' + keysCrude.join('"], a["') + '"]').split(', '), 
      keysB = ('b["' + keysCrude.join('"], b["') + '"]').split(', '), 
      keys = [].concat(keysA, keysB) 
       .sort(function(a, b){ return a.substring(1, a.length) > b.substring(1, b.length); }); 
     var exp = keys.join('').split(']b').join('] > b').split(']a').join('] || a'); 
     return exp; 
    } 

    return { 
     sort: wildExp 
    }; 

})(); 

var sortKeys = { 
    k: 'v', 
    key: 'val', 
    n: 'p', 
    name: 'param' 
}; 
var objArray = [ 
    { 
     k: 'z', 
     key: 'g', 
     n: 'a', 
     name: 'b' 
    }, 
    { 
     k: 'y', 
     key: 'h', 
     n: 'b', 
     name: 't' 
    }, 
    { 
     k: 'x', 
     key: 'o', 
     n: 'a', 
     name: 'c' 
    } 
]; 
var exp = jux.sort(sortKeys); 

console.log('@juxSort Expression:', exp); 
console.log('@juxSort:', objArray.sort(function(a, b){ 
    return eval(exp); 
})); 

これは、私がほぼ完成したAPI Juxtaposeの小さなスニペットです。これは、免除、オブジェクト単位、および配列の結露を伴うオブジェクトの平等です。これらがあなたのプロジェクトに必要なものであれば、コメントしてください。後でもっと早くlibにアクセスできるようにします。

希望すると便利です。ハッピーコーディング:)

6

jQuery.filter()機能を使用して、一致する要素のサブセットから要素を戻すことができます。

var names = [ 
 
    { name : "Joe", age:20, email: "[email protected]"}, 
 
    { name : "Mike", age:50, email: "[email protected]"}, 
 
    { name : "Joe", age:45, email: "[email protected]"} 
 
    ]; 
 
    
 
    
 
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"/>

1

var nameList = [ 
 
{name:'x', age:20, email:'[email protected]'}, 
 
{name:'y', age:60, email:'[email protected]'}, 
 
{name:'Joe', age:22, email:'[email protected]'}, 
 
{name:'Abc', age:40, email:'[email protected]'} 
 
]; 
 

 
var filteredValue = nameList.filter(function (item) { 
 
     return item.name == "Joe" && item.age < 30; 
 
}); 
 

 
//To See Output Result as Array 
 
alert(JSON.stringify(filteredValue));

あなたは、単にあなたがフィルタリング意味ですか検索してJavaScript :)

関連する問題