জিপিউরিতে গ্রেপ বনাম ফিল্টার?


84

গ্রেপ এবং ফিল্টার মধ্যে পার্থক্য সম্পর্কে আমি ভাবছিলাম:

ছাঁকনি :

যারা নির্বাচকের সাথে মেলে বা ফাংশনের পরীক্ষায় উত্তীর্ণ হয় তাদের সাথে ম্যাচ করা উপাদানগুলির সেট কমিয়ে দিন।

গ্রেপ:

একটি অ্যারের উপাদানগুলি অনুসন্ধান করে যা একটি ফিল্টার ফাংশন সন্তুষ্ট করে। মূল অ্যারে প্রভাবিত হয় না।

ঠিক আছে.

সুতরাং আমি যদি জিআরইপি-তে এটি করি:

var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];

myNewArray= jQuery.grep(arr, function(n, i){
  return (n != 5 && i > 4);
});

আমিও করতে পারতাম:

 var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];

myNewArray= $(arr).filter( function(n, i){
  return (n != 5 && i > 4);
});

উভয় পরিস্থিতিতে আমি এখনও মূল অ্যারে অ্যাক্সেস করতে পারি ...

সুতরাং ... পার্থক্য কোথায়?


4
আমি .grep()সাধারণ অ্যারে প্রসেসিংয়ের জন্য সহায়ক হিসাবে মনে করি , যখন .filter()সাধারণত উপাদান নির্বাচন সংকুচিত করার জন্য ব্যবহৃত হয়। আমি মনে করি না যে .grep()কোনও জিকুয়েরি জিনিসটি ফেরত দেয় এবং আপনি এটি চেইন করতে পারবেন না ( jQuery.fn.grepবিদ্যমান নেই)।
ফেলিক্স ক্লিং

4
$(arr).filter<- এটি অপ্রয়োজনীয়, arr.filterপরিবর্তে করুন।
মাহন

4
মাহন বিস্তৃতভাবে সমর্থিত নয়
রাই নমির

উত্তর:


135

তারা উভয় একইভাবে কাজ করে তবে তাদের ব্যবহারের ক্ষেত্রে তারা পৃথক।

ফিল্টার ফাংশনটি এইচটিএমএল উপাদানগুলির সাথে ব্যবহারের উদ্দেশ্যে করা হয়েছিল, এবং এই কারণেই এটি একটি শৃঙ্খলাবদ্ধ ফাংশন যা কোনও jQuery অবজেক্ট ফেরত দেয় এবং এটি ": এমনকি", ": বিজোড়" বা ": দৃশ্যমান" ইত্যাদির মতো ফিল্টার গ্রহণ করে আপনি পারেন ' টি গ্রেপ ফাংশন দিয়ে এটি করুন যা অ্যারেগুলির জন্য কোনও ইউটিলিটি ফাংশন হিসাবে চিহ্নিত।


4
কেবল হাইলাইট করতে চেয়েছিলেন যে। ফিল্টার () আইই তে কাজ করে না, তাই যদি আপনার অ্যাপ্লিকেশন সমস্ত ব্রাউজার সমর্থন করে তবে $ .grep () ব্যবহার করা আরও ভাল।
ভোহরুল

4
পরীক্ষা করে দেখা গেছে যে বর্তমানে ফিল্টার () মাইক্রোসফ্ট এজ হিসাবে আইই তে কাজ করে।
উমেশ কে।

19

ফিল্টার jQuery.fn এর একটি অংশ তাই এটির লক্ষ্যটি নির্বাচকদের সাথে ব্যবহার করা $('div').filterযেখানে যেখানে গ্রেপ একটি jQuery সরঞ্জাম পদ্ধতি ( jQuery.grep)


সত্য, ফিল্টারটির সাধারণ ব্যবহার হল একটি নির্বাচক স্ট্রিং পাস করা। আপনি একটি ফিল্টার ফাংশনও পাস করতে পারেন, যদিও আর্গুমেন্টগুলি (সূচক, আইটেম) নেটিভ ফিল্টার ফাংশনের (আইটেম, সূচক) এর বিপরীত। এছাড়াও, গ্রেপ দেশীয় অ্যারে ফিল্টার ফাংশনের সাথে খুব মিল বলে মনে হচ্ছে। আমি সন্দেহ করি যে jquery এর জন্য গ্রেপের সুবিধাটি পুরানো ব্রাউজারগুলির সাথে সামঞ্জস্যযোগ্যতা ...
ব্রায়ান ম্যাথিউজ

6

এর ব্যবহারের পার্থক্য:

ছাঁকনি:

$(selector).filter(selector/function)

গ্রেপ:

$.grep(array,function,invert)

সুতরাং আপনার ক্ষেত্রে আমি বরং ব্যবহার করব grep()কারণ এইভাবে অ্যারে ব্যবহার করা অপ্রয়োজনীয়:$(arr)

আমি মনে করি যে grepফাংশনটি দ্রুত, কারণ এটি কেবল অ্যারে গ্রহণ করে।


1

আমি যারা এই পরীক্ষাটি লিখেছিলাম তার grepবিরুদ্ধে কীভাবে আগ্রহী তাদের filterজন্য:

টিএলডিআর; গ্রেপ বহুগুণ দ্রুত।

স্ক্রিপ্ট আমি পরীক্ষার জন্য ব্যবহার করেছি:

function test(){
var array = [];
for(var i = 0; i<1000000; i++)
{
array.push(i);
}

var filterResult = []
for (var i = 0; i < 1000; i++){
var stime = new Date();
var filter = array.filter(o => o == 99999);
filterResult.push(new Date() - stime);
}

var grepResult = [];
var stime = new Date();
var grep = $.grep(array,function(i,o){
return o == 99999;
});
grepResult.push(new Date() - stime);

$('p').text('average filter - '+(filterResult.reduce((pv,cv)=>{ return pv +cv},0)/1000))
$('div').text('average grep - '+(grepResult.reduce((pv,cv)=>{ return pv + cv},0)/1000))
}
test();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p></p>
<div></div>


0

@ মাতাস ভাইটকেভিচিয়াস, কোড স্নিপেট ত্রুটি উপস্থাপন করেছে, এখানে একটি সংশোধন করা হয়েছে:

function test(){
var array = [];
for(var i = 0; i<1000000; i++)
{
    array.push(i);
}

var filterResult = []
for (var i = 0; i < 1000; i++){
    var stime = new Date();
    var filter = array.filter(o => o == 99999);
    filterResult.push(new Date() - stime);
}

var grepResult = [];
for (var i = 0; i < 1000; i++){
    var stime = new Date();
    var grep = $.grep(array,function(i,o){
        return o == 99999;
    });
    grepResult.push(new Date() - stime);
}

$('p').text('average filter - '+(filterResult.reduce((pv,cv)=>{ return pv +cv},0)/1000))
$('div').text('average grep - '+(grepResult.reduce((pv,cv)=>{ return pv + cv},0)/1000))
}
test();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p></p>
<div></div>

টিএলডিআর: ফায়ারফক্সে ফিল্টারটি কিছুটা দ্রুত, ক্রোমে, এটি বিপরীতে। শুধুমাত্র পারফরম্যান্স সম্পর্কে, আপনি যে কেউ ব্যবহার করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.