Skip to content

Commit e03ebf6

Browse files
committed
重构orderBy, filterBy
1 parent 90bb4dc commit e03ebf6

File tree

4 files changed

+143
-125
lines changed

4 files changed

+143
-125
lines changed

build.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ var array = [
33
require('./buildIE6Test'),
44
// require('./buildIE6Sauce'),
55

6-
// require('./buildIE9'),
7-
// require('./buildIE9Test')
6+
require('./buildIE9'),
7+
require('./buildIE9Test')
88
]
99
Promise.all(array).then(function() {
1010
console.log('build complete!!!')

dist/avalon.js

+13-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
built in 2017-1-3:21:29 version 2.2.3 by 司徒正美
2+
built in 2017-1-3:21:45 version 2.2.3 by 司徒正美
33
https://github.com/RubyLouvre/avalon/tree/2.2.3
44
55
@@ -1264,6 +1264,7 @@ avalon.bind 在绑定非元素节点也要修正事件对象
12641264
}
12651265
});
12661266
}
1267+
12671268
function __repeat(array, isArray$$1, cb) {
12681269
if (isArray$$1) {
12691270
array.forEach(function (val, index) {
@@ -1300,19 +1301,21 @@ avalon.bind 在绑定非元素节点也要修正事件对象
13001301
} else {
13011302
return array;
13021303
}
1304+
var index = 0;
13031305
var isArray$$1 = type === 'array';
1304-
array = convertArray(array, isArray$$1).filter(function (el, i) {
1305-
return !!criteria.apply(el, [el.value, i].concat(args));
1306-
});
1307-
13081306
var target = isArray$$1 ? [] : {};
1309-
return recovery(target, array, function (el) {
1310-
if (isArray$$1) {
1311-
target.push(el.value);
1312-
} else {
1313-
target[el.key] = el.value;
1307+
__repeat(array, isArray$$1, function (key) {
1308+
var val = array[key];
1309+
if (criteria.apply(val, [val, index].concat(args))) {
1310+
if (isArray$$1) {
1311+
target.push(val);
1312+
} else {
1313+
target[key] = val;
1314+
}
13141315
}
1316+
index++;
13151317
});
1318+
return target;
13161319
}
13171320

13181321
function selectBy(data, array, defaults) {
@@ -1384,7 +1387,6 @@ avalon.bind 在绑定非元素节点也要修正事件对象
13841387
};
13851388
i++;
13861389
});
1387-
13881390
return ret;
13891391
}
13901392

dist/avalon.modern.js

+73-60
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
built in 2017-1-3:20:17 version 2.2.3 by 司徒正美
2+
built in 2017-1-3:21:44 version 2.2.3 by 司徒正美
33
https://github.com/RubyLouvre/avalon/tree/2.2.3
44
55
fix VElement hackIE BUG
@@ -889,6 +889,31 @@ avalon.bind 在绑定非元素节点也要修正事件对象
889889
locate.SHORTMONTH = locate.MONTH
890890
dateFilter.locate = locate
891891

892+
/**
893+
$$skipArray:是系统级通用的不可监听属性
894+
$skipArray: 是当前对象特有的不可监听属性
895+
896+
不同点是
897+
$$skipArray被hasOwnProperty后返回false
898+
$skipArray被hasOwnProperty后返回true
899+
*/
900+
var falsy
901+
var $$skipArray = {
902+
$id: falsy,
903+
$render: falsy,
904+
$track: falsy,
905+
$element: falsy,
906+
$computed: falsy,
907+
$watch: falsy,
908+
$fire: falsy,
909+
$events: falsy,
910+
$accessors: falsy,
911+
$hashcode: falsy,
912+
$mutations: falsy,
913+
$vbthis: falsy,
914+
$vbsetter: falsy
915+
}
916+
892917
/*
893918
https://github.com/hufyhang/orderBy/blob/master/index.js
894919
*/
@@ -903,20 +928,16 @@ avalon.bind 在绑定非元素节点也要修正事件对象
903928
}
904929
var mapping = {}
905930
var temp = []
906-
var index = 0
907-
for (var key in array) {
908-
if (array.hasOwnProperty(key)) {
909-
var val = array[key]
910-
var k = criteria(val, key)
911-
if (k in mapping) {
912-
mapping[k].push(key)
913-
} else {
914-
mapping[k] = [key]
915-
}
916-
917-
temp.push(k)
931+
__repeat(array, Array.isArray(array), function (key) {
932+
var val = array[key]
933+
var k = criteria(val, key)
934+
if (k in mapping) {
935+
mapping[k].push(key)
936+
} else {
937+
mapping[k] = [key]
918938
}
919-
}
939+
temp.push(k)
940+
})
920941

921942
temp.sort()
922943
if (decend < 0) {
@@ -933,6 +954,24 @@ avalon.bind 在绑定非元素节点也要修正事件对象
933954
}
934955
})
935956
}
957+
958+
function __repeat(array, isArray$$1, cb) {
959+
if (isArray$$1) {
960+
array.forEach(function (val, index) {
961+
cb(index)
962+
})
963+
} else if (typeof array.$track === 'string') {
964+
array.$track.replace(/[^]+/g, function (k) {
965+
cb(k)
966+
})
967+
} else {
968+
for (var i in array) {
969+
if (array.hasOwnProperty(i)) {
970+
cb(i)
971+
}
972+
}
973+
}
974+
}
936975
function filterBy(array, search) {
937976
var type = avalon$2.type(array)
938977
if (type !== 'array' && type !== 'object') throw 'filterBy只能处理对象或数组'
@@ -952,20 +991,21 @@ avalon.bind 在绑定非元素节点也要修正事件对象
952991
} else {
953992
return array
954993
}
955-
956-
array = convertArray(array).filter(function (el, i) {
957-
return !!criteria.apply(el, [el.value, i].concat(args))
958-
})
959-
994+
var index = 0
960995
var isArray$$1 = type === 'array'
961996
var target = isArray$$1 ? [] : {}
962-
return recovery(target, array, function (el) {
963-
if (isArray$$1) {
964-
target.push(el.value)
965-
} else {
966-
target[el.key] = el.value
997+
__repeat(array, isArray$$1, function (key) {
998+
var val = array[key]
999+
if (criteria.apply(val, [val, index].concat(args))) {
1000+
if (isArray$$1) {
1001+
target.push(val)
1002+
} else {
1003+
target[key] = val
1004+
}
9671005
}
1006+
index++
9681007
})
1008+
return target
9691009
}
9701010

9711011
function selectBy(data, array, defaults) {
@@ -992,7 +1032,7 @@ avalon.bind 在绑定非元素节点也要修正事件对象
9921032
}
9931033
//将目标转换为数组
9941034
if (type === 'object') {
995-
input = convertArray(input)
1035+
input = convertArray(input, false)
9961036
}
9971037
var n = input.length
9981038
limit = Math.floor(Math.min(n, limit))
@@ -1026,19 +1066,17 @@ avalon.bind 在绑定非元素节点也要修正事件对象
10261066

10271067
//Chrome谷歌浏览器中js代码Array.sort排序的bug乱序解决办法
10281068
//http://www.cnblogs.com/yzeng/p/3949182.html
1029-
function convertArray(array) {
1069+
function convertArray(array, isArray$$1) {
10301070
var ret = [],
10311071
i = 0
1032-
for (var key in array) {
1033-
if (array.hasOwnProperty(key)) {
1034-
ret[i] = {
1035-
oldIndex: i,
1036-
value: array[key],
1037-
key: key
1038-
}
1039-
i++
1072+
__repeat(array, isArray$$1, function (key) {
1073+
ret[i] = {
1074+
oldIndex: i,
1075+
value: array[key],
1076+
key: key
10401077
}
1041-
}
1078+
i++
1079+
})
10421080
return ret
10431081
}
10441082

@@ -2816,31 +2854,6 @@ avalon.bind 在绑定非元素节点也要修正事件对象
28162854
return avalon$2.vdom(a, 'toDOM')
28172855
}
28182856

2819-
/**
2820-
$$skipArray:是系统级通用的不可监听属性
2821-
$skipArray: 是当前对象特有的不可监听属性
2822-
2823-
不同点是
2824-
$$skipArray被hasOwnProperty后返回false
2825-
$skipArray被hasOwnProperty后返回true
2826-
*/
2827-
var falsy
2828-
var $$skipArray = {
2829-
$id: falsy,
2830-
$render: falsy,
2831-
$track: falsy,
2832-
$element: falsy,
2833-
$computed: falsy,
2834-
$watch: falsy,
2835-
$fire: falsy,
2836-
$events: falsy,
2837-
$accessors: falsy,
2838-
$hashcode: falsy,
2839-
$mutations: falsy,
2840-
$vbthis: falsy,
2841-
$vbsetter: falsy
2842-
}
2843-
28442857
avalon$2.pendingActions = []
28452858
avalon$2.uniqActions = {}
28462859
avalon$2.inTransaction = 0

0 commit comments

Comments
 (0)