js 대상 배열 속성 에 따라 빠 른 정렬

추천 하 는 프로그램 에 따라 IE 에서 뛰 어 내 렸 습 니 다.확실히 정렬 시간 이 적 습 니 다
 
<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 을 꺼 냅 니 다.정렬 된 엘 수 그룹 을 얻 을 수 있 습 니 다.

좋은 웹페이지 즐겨찾기