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
'programing' 카테고리의 다른 글
서명되지 않은 int 0xFFFFFFFF가 int -1과 같은 이유는 무엇입니까? (0) | 2023.11.06 |
---|---|
워드프레스에서 분류법 또는 사용자 정의 필드를 동시에 조회하려면 어떻게 해야 합니까? (0) | 2023.11.06 |
mysql에서 구별되는 2개의 열 조합 선택 (0) | 2023.11.06 |
저장 프로시저의 변수에 선택 할당 (0) | 2023.11.06 |
MySQL/MariaDB 커넥터를 배포하는 것과 모듈로 추가하는 것의 차이점은 무엇입니까? (0) | 2023.11.01 |