2012-01-12 25 views
5

मेरे पास jQuery में तारों की एक सरणी है। मेरे पास कीवर्ड की एक और सरणी है जिसे मैं स्ट्रिंग सरणी फ़िल्टर करने के लिए उपयोग करना चाहता हूं।मैं तारों की सरणी कैसे ले सकता हूं और उन्हें फ़िल्टर कर सकता हूं?

मेरे दो सरणियों:

var arr = new Array("Sally works at Taco Bell", "Tom drives a red car", "Tom is from Ohio", "Alex is from Ohio"); 

    var keywords = new Array("Tom", "Ohio"); 

मैं jQuery में keywords सरणी का उपयोग कर arr सरणी फ़िल्टर कर सकते हैं कैसे? इस स्थिति में यह "टैको बेल में सैली काम करता है" फ़िल्टर करेगा और बाकी को बनाए रखेगा।

नीचे वास्तविक कोड है जिसका उपयोग मैं कर रहा हूं।

var keywords= []; 
var interval = ""; 
var pointer = ''; 
var scroll = document.getElementById("tail_print"); 

$("#filter_button").click(
function(){ 
    var id = $("#filter_box").val(); 
    if(id == "--Text--" || id == ""){ 
     alert("Please enter text before searching."); 
    }else{ 
     keywords.push(id); 
     $("#keywords-row").append("<td><img src=\"images/delete.png\" class=\"delete_filter\" /> " + id + "</td>"); 
    } 
} 
); 

$(".delete_filter").click(
function(){ 
    ($(this)).remove(); 
} 
); 

function startTail(){ 
clearInterval(interval); 
interval = setInterval(
function(){ 
    $.getJSON("ajax.php?function=tail&pointer=" + pointer + "&nocache=" + new Date(), 
     function(data){ 
      pointer = data.pointer; 
      $("#tail_print").append(data.log); 
      scroll.scrollTop = scroll.scrollHeight; 
     }); 
}, 1000); 
} 

इसका पूरा उद्देश्य उपयोगकर्ता को लॉग परिणाम फ़िल्टर करने की अनुमति देना है। तो उपयोगकर्ता startTail() और $.getJSON() से शुरू होने वाली एक क्रिया करता है जो एक PHP फ़ंक्शन द्वारा निर्मित JSON ऑब्जेक्ट पुनर्प्राप्त करता है और परिणाम प्रिंट करता है। बेकार ढंग से काम करता है। अब मैं उपयोगकर्ता को आने वाली पूंछ वस्तुओं को फ़िल्टर करने का विकल्प देना चाहता हूं। उपयोगकर्ता फ़िल्टर बटन पर क्लिक करता है और jQuery फ़िल्टर टेक्स्ट लेता है और इसे keywords सरणी में जोड़ता है तो JSON ऑब्जेक्ट से data.logkeywords सरणी का उपयोग करके फ़िल्टर किया जाता है और फिर स्क्रीन पर जोड़ा जाता है।

मेरे पास एक डिलीट फ़िल्टर फ़ंक्शन भी है जो काम नहीं कर रहा है। शायद कोई मेरी मदद कर सकता है।

+0

जोड़ा जावास्क्रिप्ट टैग, क्योंकि यह एक जावास्क्रिप्ट सवाल (jQuery जावास्क्रिप्ट के लिए एक पुस्तकालय है) है।बीटीडब्ल्यू, वे सरणी जावास्क्रिप्ट सरणी नहीं लगती हैं ... – kapa

+0

मैंने jQuery टैग भी हटा दिया क्योंकि प्रश्न के साथ इसके साथ कुछ लेना देना नहीं है। इसके अलावा, @ बज़मेगाकापा सही है। वे मान्य जावास्क्रिप्ट सरणी नहीं हैं। यह PHP सरणी की तरह दिखता है। जावास्क्रिप्ट में, बस वर्ग ब्रैकेट का उपयोग करें: 'var arr = [1, 2, 3]' –

+0

आप सही हैं। क्षमा करें ... मैंने जो प्रोग्राम लिखा है वह jQuery, जावास्क्रिप्ट, PHP, और HTML के संयोजन का उपयोग करता है .. बस थोड़ा मिश्रित हो गया। – amlane86

उत्तर

8
$.grep(arr, $.proxy(/./.test, new RegExp(keywords.join("|")))); 
jQuery के बिना

:

arr.filter(/./.test.bind(new RegExp(keywords.join("|")))); 
+2

+1। क्या यह काम करता है? – qwertymk

+0

@qwertymk अच्छी तरह से मैंने केवल आईई 7 और क्रोम में परीक्षण किया है, ऐसा कोई कारण नहीं है कि यह अन्य ब्राउज़रों में काम नहीं करेगा। यदि आप विरासत ब्राउज़र में दूसरे का उपयोग कर रहे हैं तो आपको उदाहरण के लिए एमडीएन से '.filter' और' .bind' को छिपाना होगा। – Esailija

+0

[डेमो] (http://jsfiddle.net/yDbGq/) – qwertymk

0

आप [filter][1] फ़ंक्शन का उपयोग कर सकते हैं, लेकिन किसी भी तरह से आपको दोनों सरणी के माध्यम से लूप की आवश्यकता होगी। एक स्ट्रिंग के भीतर एक स्ट्रिंग निहित है या नहीं, यह देखने के लिए आप indexOf का उपयोग कर सकते हैं।

var arr = ["Sally works at Taco Bell", "Tom drives a red car", "Tom is from Ohio", "Alex is from Ohio"]; 
var keywords = ["Tom", "Ohio"]; 
var filtered = []; 

for(var i = 0; i < arr.length; i++) { 
    for(var j = 0; j < keywords.length; j++) { 
     if (arr[i].indexOf(keywords[j]) > -1) { 
      filtered.push(arr[i]); 
      break; 
     } 
    } 
} 

console.log(filtered); 

Live example

4

grep "फिल्टर" के लिए jQuery के शब्द है

var arr = ["Sally works at Taco Bell", "Tom drives a red car", "Tom is from Ohio", "Alex is from Ohio"]; 
var keywords = ["Tom", "Ohio"]; 

var regex = new RegExp(keywords.join("|")); 

result = $.grep(arr, function(s) { return s.match(regex) }) 
+0

मेरी राय में यहां सबसे अच्छा जवाब है, भले ही यह मेरे से कुछ हद तक उधार लेता है;)। –

+0

@ChrisPratt: मैंने कुछ भी उधार नहीं लिया। – georg

1
var filtered = []; 
var re = new RegExp(keywords.join('|')); 

for (var i=0; i<arr.length; i++) { 
    if (re.search(arr[i])) { 
     filtered.append(arr[i]); 
    } 
} 

अद्यतन

वहाँ एक jQuery के नजरिए से यहां के सही उत्तर है के बाद से, मैं संशोधित मेरी एक वीए का जवाब निला जावास्क्रिप्ट दृष्टिकोण, केवल उन लोगों के लिए जिन्हें jQuery के बिना ऐसा करने की आवश्यकता हो सकती है।

+0

... और मुझे गंभीरता से सिर के शीर्ष पर रेगेक्स के बारे में सोचना है। अच्छी तरह से किया। : डी हालांकि इसे '$ .grep()' फ़ंक्शन के साथ थप्पड़ मारना अच्छा लगेगा। +1 –

+0

+1 बहुत अच्छा समाधान, लूप लिखें, और कोई jQuery आवश्यक नहीं है: डी – jondavidjohn

+2

यदि आप 'for..in' का उपयोग कर रहे हैं तो 'हैऑनप्रॉपर्टी()' शामिल करना चाहूंगा, मैं ईमानदारी से नियमित रूप से नियमित रूप से उपयोग करूंगा। के लिए, आप वस्तुओं के साथ सरणी से निपट रहे हैं। https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/hasOwnProperty – jondavidjohn

0

का उपयोग jQuery भयानक शक्तियां:

var keywords = ["Tom", "Ohio"]; 
$(["Sally works at Taco Bell", "Tom drives a red car", "Tom is from Ohio", "Alex is from Ohio"]).filter(function(k, v) { 
    return v.match("(" + keywords.join("|") + ")"); 
}); 
0
var keywords = ['Tom', 'Ohio']; 
var arr = ['Sally works at Taco Bell', 'Tom drives a red car', 'Tom is from Ohio', 'Alex is from Ohio']; 
var matcher = new RegExp(keywords.join('|')); 
var newarr = []; 
$.each(arr, function(index, elem) { 
    if (elem.match(matcher)) { 
     newarr.push(elem); 
    } 
}); 
console.log(newarr); 

बेला: http://jsfiddle.net/LQ92u/1/

1

सिर के ऊपर, और untested। एक jQuery प्लगइन के रूप में:

(function($) { 

    $.foo = function(needle, haystack) { 
     return $.grep(haystack, function() { 
      var words = this.split(' '), 
       flag = false 
       ; 

      for(var i=0; i < words.length; i++) { 
       flag = $.inArray(words[i], needle); 
       if (flag) { break; } 
      } 

      return flag;     
     }); 
    }; 

})(jQuery); 

तो आप कर सकते हैं (माना जाता है कि) रन है कि पसंद:

var bar = $.foo(keywords, arr); 
संबंधित मुद्दे

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