- jianfeng008cn
- 等级:
- 性别:
- 文章: 682
- 积分: 713
- 来自: 湖州
|
js 代码
- var $break = new Object(); //表示break的对象 可以对比java的exception的使用
- var $continue = new Object(); //表示continue的对象 可以对比java的exception的使用
-
- var Enumerable = {
- each: function(iterator) { //执行_each函数
- var index = 0;
- try {
- this._each(function(value) {
- try {
- iterator(value, index++);
- } catch (e) {
- if (e != $continue) throw e;
- }
- });
- } catch (e) {
- if (e != $break) throw e;
- }
- },
- 返回函数遍历执行后的总结果 如果每次执行都返回非假则得到true
- all: function(iterator) {
- var result = true;
- this.each(function(value, index) {
- result = result && !!(iterator || Prototype.K)(value, index);
- if (!result) throw $break;
- });
- return result;
- },
-
- any: function(iterator) {
- var result = true;
- this.each(function(value, index) {
- if (result = !!(iterator || Prototype.K)(value, index))
- throw $break;
- });
- return result;
- },
-
- collect: function(iterator) {
- var results = [];
- this.each(function(value, index) {
- results.push(iterator(value, index));
- });
- return results;
- },
- // 返回any函数中执行非假的那个参数value
- detect: function (iterator) {
- var result;
- this.each(function(value, index) {
- if (iterator(value, index)) {
- result = value;
- throw $break;
- }
- });
- return result;
- },
- // 针对collect函数进行过滤 只有执行非假的函数参数value才进入结果数组
- findAll: function(iterator) {
- var results = [];
- this.each(function(value, index) {
- if (iterator(value, index))
- results.push(value);
- });
- return results;
- },
- // 针对collect函数进行过滤 只有执行value符合pattern,才把执行结果进入结果数组
- grep: function(pattern, iterator) {
- var results = [];
- this.each(function(value, index) {
- var stringValue = value.toString();
- if (stringValue.match(pattern))
- results.push((iterator || Prototype.K)(value, index));
- })
- return results;
- },
- //boolean 是否为value的数组的成员
- include: function(object) {
- var found = false;
- this.each(function(value) {
- if (value == object) {
- found = true;
- throw $break;
- }
- });
- return found;
- },
- //通过注入inject 累及运算结果进行 累计运算
- inject: function(memo, iterator) {
- this.each(function(value, index) {
- memo = iterator(memo, value, index);
- });
- return memo;
- },
- //传递 函数+需要的参数 进行遍历执行 并返回执行结果集
- invoke: function(method) {
- var args = $A(arguments).slice(1);
- return this.collect(function(value) {
- return value[method].apply(value, args);
- });
- },
- // 取函数遍历执行后 最大的返回值
- max: function(iterator) {
- var result;
- this.each(function(value, index) {
- value = (iterator || Prototype.K)(value, index);
- if (value >= (result || value))
- result = value;
- });
- return result;
- },
- // 取函数遍历执行后 最小的返回值
- min: function(iterator) {
- var result;
- this.each(function(value, index) {
- value = (iterator || Prototype.K)(value, index);
- if (value <= (result || value))
- result = value;
- });
- return result;
- },
- //把执行结果按照true 和 非true 作为2维数组返回
- partition: function(iterator) {
- var trues = [], falses = [];
- this.each(function(value, index) {
- ((iterator || Prototype.K)(value, index) ?
- trues : falses).push(value);
- });
- return [trues, falses];
- },
- // 遍历数组取每个元素的该属性值放进结果数组返回
- pluck: function(property) {
- var results = [];
- this.each(function(value, index) {
- results.push(value[property]);
- });
- return results;
- },
- //返回遍历执行函数iterator结果非真的元素的结合
- reject: function(iterator) {
- var results = [];
- this.each(function(value, index) {
- if (!iterator(value, index))
- results.push(value);
- });
- return results;
- },
- //返回排序函数执行后的排序结果集
- sortBy: function(iterator) {
- return this.collect(function(value, index) {
- return {value: value, criteria: iterator(value, index)};
- }).sort(function(left, right) {
- var a = left.criteria, b = right.criteria;
- return a < b ? -1 : a > b ? 1 : 0;
- }).pluck('value');
- },
- //可遍历集合转换成js数组
- toArray: function() {
- return this.collect(Prototype.K);
- },
- //zip压缩
- zip: function() {
- var iterator = Prototype.K, args = $A(arguments);
- if (typeof args.last() == 'function')
- iterator = args.pop();
-
- var collections = [this].concat(args).map($A);
- return this.map(function(value, index) {
- iterator(value = collections.pluck(index));
- return value;
- });
- },
- //查看 类似tostring
- inspect: function() {
- return '#this.toArray().inspect() + '>';
- }
- }
-
- Object.extend(Enumerable, {
- map: Enumerable.collect,
- find: Enumerable.detect,
- select: Enumerable.findAll,
- member: Enumerable.include,
- entries: Enumerable.toArray
- });
待完善,欢迎指点、意见、建议。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|