programing

jQuery에서 Grep vs 필터?

testmans 2023. 11. 6. 21:41
반응형

jQuery에서 Grep vs 필터?

Grep과 Filter의 차이점에 대해 궁금했습니다.

필터:

일치하는 요소 집합을 셀렉터와 일치하거나 함수의 테스트를 통과하는 요소로 줄입니다.

그렙:

필터 함수를 만족하는 배열의 요소를 찾습니다.원래 배열은 영향을 받지 않습니다.

네 알겠습니다.

GREP에서 이 작업을 수행하면 다음과 같습니다.

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

두 상황 모두에서 원래 배열에 접근할 수 있습니다...

그럼.. 어디가 다른거죠?

이 둘은 사용법이 다르지만 비슷한 방식으로 작동합니다.

필터 기능은 html 요소와 함께 사용하기 위한 것으로, jQuery 객체를 반환하는 체인 가능한 함수이며 ":even", ":odd" 또는 ":visible"과 같은 필터를 받아들입니다.어레이의 유틸리티 기능인 grep 기능으로는 그렇게 할 수 없습니다.

필터는 jQuery.fn의 일부이므로 셀렉터와 함께 사용하는 것이 목적입니다.$('div').filter여기서 grep은 jQuery 도구 메서드입니다(jQuery.grep)

용도의 차이:

필터:

$(selector).filter(selector/function)

그렙:

$.grep(array,function,invert)

그래서 당신의 경우에는 제가 사용하고 싶습니다.grep()배열을 이런 식으로 사용하는 것은 불필요하기 때문입니다.$(arr).

저도 그렇게 생각합니다.grep기능은 배열만 허용하기 때문에 더 빠릅니다.

어떤 방법에 관심이 있는 사람들에게.grep에 대항해 행함filter이 테스트를 작성했습니다.

TLDR; 그렙이 몇배나 빠릅니다.

테스트에 사용한 스크립트:

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>

@Matas Vaitkevicius 게시된 코드 조각에 오류가 표시됩니다. 여기 수정된 코드가 있습니다.

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>

TLDR : 파이어폭스에서는 필터 속도가 약간 빠릅니다. 크롬에서는 그 반대입니다.공연과 관련해서는 누구나 이용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/10139916/grep-vs-filter-in-jquery

반응형