-
Notifications
You must be signed in to change notification settings - Fork 9
/
array.h.js
114 lines (111 loc) · 2.56 KB
/
array.h.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
Copyright (c) Baidu Youa Wed QWrap
version: $version$ $release$ released
*/
/*
* @class ArrayH 核心对象Array的扩展
* @singleton
* @namespace QW
* @helper
*/
(function() {
var ArrayH = {
/*
* 快速除重,相对于ArrayH.unique,为了效率,牺了代码量与严谨性。如果数组里有不可添加属性的对象,则会抛错.
* @method quicklyUnique
* @static
* @param {array} arr 待处理数组
* @return {array} 返回除重后的新数组
*/
quicklyUnique: function(arr) {
var strs = {},
numAndBls = {},
objs = [],
hasNull,
hasUndefined,
ret = [];
for (var i = 0, len = arr.length; i < len; i++) {
var oI = arr[i];
if (oI === null) {
if (!hasNull) {
hasNull = true;
ret.push(oI);
}
continue;
}
if (oI === undefined) {
if (!hasUndefined) {
hasUndefined = true;
ret.push(oI);
}
continue;
}
var type = typeof oI;
switch (type) {
case 'object':
case 'function':
if (!oI.__4QuicklyUnique) {
oI.__4QuicklyUnique = true;
ret.push(oI);
objs.push(oI);
}
break;
case 'string':
if (!strs[oI]) {
ret.push(oI);
strs[oI] = true;
}
default:
if (!numAndBls[oI]) {
ret.push(oI);
numAndBls[oI] = true;
}
break;
}
}
for (i = 0; oI = objs[i++];) {
if (oI instanceof Object) {
delete oI.__4QuicklyUnique;
} else {
oI.__4QuicklyUnique = undefined;
}
}
return ret;
},
/*
* 快速排序,按某个属性,或按“获取排序依据的函数”,来排序.
* @method soryBy
* @static
* @param {array} arr 待处理数组
* @param {string|function} prop 排序依据属性,获取
* @param {boolean} desc 降序
* @return {array} 返回排序后的新数组
*/
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++) {
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;
}
};
QW.ObjectH.mix(QW.ArrayH, ArrayH);
}());