In the previous article "about selector performance competition" mentioned, visual feel in $ ("div,p,a") such a comma, sizzle time-consuming anomaly (more than 600 elements, took 200ms), said that it may not be optimized under IE sorting.
According to the recommended program under IE ran under, indeed, the sequencing time is very small.
123456789101112131415161718192021222324252627282930313233343536 |
/*
* 快速排序,按某个属性,或按“获取排序依据的函数”,来排序.
* @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;
};
|
Array native sort, when it passes a comparison function, because of its internal use of which sort algorithm, all need to be compared, so, time-consuming is very natural.
Above the quick sort, and it's not multiple times,
But:
1. Takes the El attribute value, produces a string object with the attribute value,
2. Attach the El to the string object.
3. Arrays are made up of string objects.
4. Sorts the array of string objects in the native sort.
5. In the ordered string array, the El is removed sequentially.
That is to get the sequence of the El array.