js 대상 배열 속성 에 따라 빠 른 정렬
<script>
/*
*
*/
function getRandomPlayCard(m){
var array1=new Array(m);
for(var i=0;i<m;i++){
var rnd=Math.floor(Math.random()*(i+0.99999))
array1[i]=array1[rnd];
array1[rnd]=i;
}
return array1;
};
/*
* , , “ ”, .
* @method soryBy
* @static
* @param {array} arr
* @param {string|function} prop ,
* @param {boolean} desc
* @return {array}
*/
var sortBy =function (arr, prop, desc){
var props=[],
ret=[],
i=0,
len=arr.length;
if(typeof prop=='string') {
for(; i<len; i++){
var oI = arr[i];
(props[i] = new String(oI && oI[prop] || ''))._obj = oI;
}
}
else if(typeof prop=='function') {
for(; i<len; i++){
var oI = arr[i];
(props[i] = new String(oI && prop(oI) || ''))._obj = oI;
}
}
else {
throw ' ';
}
props.sort();
for(i=0; i<len; i++) {
ret[i] = props[i]._obj;
}
if(desc) ret.reverse();
return ret;
};
for(var i=0;i<1000;i++){
document.write('<div>a'+i+'</div>')
}
var els=document.getElementsByTagName('div');
var cards=getRandomPlayCard(els.length);
var randomEls=[];
for(var i=0,len=cards.length;i<len;i++) randomEls[cards[i]]=els[i];//
alert([' :',randomEls.length,' : ',randomEls[0].innerHTML,randomEls[randomEls.length-1].innerHTML]);
var d0=new Date();
var elsSorted=sortBy(randomEls,function(el){return el.sourceIndex+100000000;})
alert([' :',elsSorted.length,' :',new Date()-d0,' : ',elsSorted[0].innerHTML,elsSorted[elsSorted.length-1].innerHTML]);
</script>
Array 원생 의 sort 는 비교 함 수 를 전달 할 때 내부 에서 어떤 정렬 알고리즘 을 사용 하 는 지 여러 번 비교 해 야 하기 때문에 시간 이 걸 리 는 것 은 자 연 스 러 운 일이 다.위의 빠 른 정렬 은 여러 번 비교 하지 않 고:1 입 니 다.엘 속성 치 를 꺼 내 속성 치 로 String 대상 을 만 듭 니 다,2.엘 을 String 대상 에 붙 입 니 다.3。String 대상 으로 배열 을 구성 합 니 다.4。String 대상 배열 에 네 이 티 브 sort 로 정렬 합 니 다.5。정렬 된 String 배열 에서 순서대로 el 을 꺼 냅 니 다.정렬 된 엘 수 그룹 을 얻 을 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
jQuery 작업 대상 배열 의 실현 코드 를 이용 합 니 다.텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.