2012-11-27 23 views
63

मेरे पास ऑब्जेक्ट्स की एक सरणी है और मैं इसे खोजने का सबसे अच्छा तरीका सोच रहा हूं। नीचे दिए गए उदाहरण को देखते हुए मैं name = "Joe" और age < 30 कैसे खोज सकता हूं? क्या jQuery कुछ भी मदद कर सकता है या क्या मुझे इस खोज को मजबूर करना पड़ता है?ऑब्जेक्ट्स की जावास्क्रिप्ट फ़िल्टर सरणी

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

खोज करके आप फ़िल्टर मतलब है? – joragupra

उत्तर

91

आप jQuery.grep() उपयोग कर सकते हैं:

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

डेमो:http://jsfiddle.net/ejPV4/

+2

बहुत चालाक! मुझे यह पसंद है। – user441521

+0

बहुत अच्छा काम कर रहा है ... –

64

आप [].filter विधि के साथ बहुत आसानी से कर सकते हैं:

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

आप की आवश्यकता होगी जोड़ना [].filter विधि का समर्थन नहीं करने वाले ब्राउज़र के लिए एक शिम: this MDN page ऐसा कोड देता है।

+0

मैं सुझाव देता हूं कि लिंक किए गए एमडीएन पेज में पॉलीफिल पर नज़र डालें, बस कुछ मजेदार पठन कोड प्राप्त करें और संभवतः कुछ नया सीखें। – Nobita

0

तो त्वरित प्रश्न। क्या होगा यदि आपके पास ऑब्जेक्ट्स के दो एरे हैं और आप इन ऑब्जेक्ट एरे को 'संरेखित' करना चाहते हैं ताकि आप सुनिश्चित कर सकें कि प्रत्येक सरणी की ऑब्जेक्ट अन्य सरणी के क्रम में हैं? क्या होगा यदि आपको पता नहीं है कि सरणी के अंदर की किसी भी वस्तु में कौन सी कुंजी और मूल्य शामिल हैं ... वे कितने कम क्रम में हैं?

तो आपको अपने [].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); 
})); 

आप भी अपनी वस्तुओं में से प्रत्येक में कुंजी के सभी के लिए एक बेहतर सामूहिक अभिव्यक्ति बनाने के लिए प्रत्येक वस्तु के लिए एक यात्रा पर इस समारोह का उपयोग कर सकते हैं, और फिर अपने सरणी कि जिस तरह से फ़िल्टर करें।

यह एपीआई जुक्टापोज़ से एक छोटा सा स्निपेट है जो मैंने लगभग पूरा कर लिया है, जो यह करता है, छूट के साथ समानता का ऑब्जेक्ट करता है, एकता ऑब्जेक्ट्स और सरणी संघनन करता है। यदि ये चीजें हैं जो आपको चाहिए या अपनी परियोजना के लिए चाहते हैं तो कृपया टिप्पणी करें और मैं बाद में मुक्ति को सुलभ बना दूंगा।

आशा है कि इससे मदद मिलती है! हैप्पी कोडिंग :)

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

आप बस जावास्क्रिप्ट :) का उपयोग कर सकते

संबंधित मुद्दे