Changeset 8997
- Timestamp:
- 03/09/08 06:56:03 (7 months ago)
- Files:
-
- spinoffs/prototype/trunk/CHANGELOG (modified) (1 diff)
- spinoffs/prototype/trunk/src/enumerable.js (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
spinoffs/prototype/trunk/CHANGELOG
r8948 r8997 1 * Performance improvements for Enumerables. Closes #11264. [Ben, Samuel Lebeau] 2 1 3 * deprecation extension: mark Hash.toJSON() as removed. [Tobie Langel] 2 4 spinoffs/prototype/trunk/src/enumerable.js
r8798 r8997 4 4 each: function(iterator, context) { 5 5 var index = 0; 6 iterator = iterator.bind(context);7 6 try { 8 7 this._each(function(value) { 9 iterator (value, index++);8 iterator.call(context, value, index++); 10 9 }); 11 10 } catch (e) { … … 16 15 17 16 eachSlice: function(number, iterator, context) { 18 iterator = iterator ? iterator.bind(context) : Prototype.K;19 17 var index = -number, slices = [], array = this.toArray(); 20 18 if (number < 1) return array; … … 25 23 26 24 all: function(iterator, context) { 27 iterator = iterator ? iterator.bind(context) :Prototype.K;25 iterator = iterator || Prototype.K; 28 26 var result = true; 29 27 this.each(function(value, index) { 30 result = result && !!iterator (value, index);28 result = result && !!iterator.call(context, value, index); 31 29 if (!result) throw $break; 32 30 }); … … 35 33 36 34 any: function(iterator, context) { 37 iterator = iterator ? iterator.bind(context) :Prototype.K;35 iterator = iterator || Prototype.K; 38 36 var result = false; 39 37 this.each(function(value, index) { 40 if (result = !!iterator (value, index))38 if (result = !!iterator.call(context, value, index)) 41 39 throw $break; 42 40 }); … … 45 43 46 44 collect: function(iterator, context) { 47 iterator = iterator ? iterator.bind(context) :Prototype.K;48 var results = []; 49 this.each(function(value, index) { 50 results.push(iterator (value, index));45 iterator = iterator || Prototype.K; 46 var results = []; 47 this.each(function(value, index) { 48 results.push(iterator.call(context, value, index)); 51 49 }); 52 50 return results; … … 54 52 55 53 detect: function(iterator, context) { 56 iterator = iterator.bind(context);57 54 var result; 58 55 this.each(function(value, index) { 59 if (iterator (value, index)) {56 if (iterator.call(context, value, index)) { 60 57 result = value; 61 58 throw $break; … … 66 63 67 64 findAll: function(iterator, context) { 68 iterator = iterator.bind(context); 69 var results = []; 70 this.each(function(value, index) { 71 if (iterator(value, index)) 65 var results = []; 66 this.each(function(value, index) { 67 if (iterator.call(context, value, index)) 72 68 results.push(value); 73 69 }); … … 76 72 77 73 grep: function(filter, iterator, context) { 78 iterator = iterator ? iterator.bind(context) :Prototype.K;74 iterator = iterator || Prototype.K; 79 75 var results = []; 80 76 … … 84 80 this.each(function(value, index) { 85 81 if (filter.match(value)) 86 results.push(iterator (value, index));82 results.push(iterator.call(context, value, index)); 87 83 }); 88 84 return results; … … 112 108 113 109 inject: function(memo, iterator, context) { 114 iterator = iterator.bind(context); 115 this.each(function(value, index) { 116 memo = iterator(memo, value, index); 110 this.each(function(value, index) { 111 memo = iterator.call(context, memo, value, index); 117 112 }); 118 113 return memo; … … 127 122 128 123 max: function(iterator, context) { 129 iterator = iterator ? iterator.bind(context) :Prototype.K;124 iterator = iterator || Prototype.K; 130 125 var result; 131 126 this.each(function(value, index) { 132 value = iterator (value, index);127 value = iterator.call(context, value, index); 133 128 if (result == null || value >= result) 134 129 result = value; … … 138 133 139 134 min: function(iterator, context) { 140 iterator = iterator ? iterator.bind(context) :Prototype.K;135 iterator = iterator || Prototype.K; 141 136 var result; 142 137 this.each(function(value, index) { 143 value = iterator (value, index);138 value = iterator.call(context, value, index); 144 139 if (result == null || value < result) 145 140 result = value; … … 149 144 150 145 partition: function(iterator, context) { 151 iterator = iterator ? iterator.bind(context) :Prototype.K;146 iterator = iterator || Prototype.K; 152 147 var trues = [], falses = []; 153 148 this.each(function(value, index) { 154 (iterator (value, index) ?149 (iterator.call(context, value, index) ? 155 150 trues : falses).push(value); 156 151 }); … … 167 162 168 163 reject: function(iterator, context) { 169 iterator = iterator.bind(context); 170 var results = []; 171 this.each(function(value, index) { 172 if (!iterator(value, index)) 164 var results = []; 165 this.each(function(value, index) { 166 if (!iterator.call(context, value, index)) 173 167 results.push(value); 174 168 }); … … 177 171 178 172 sortBy: function(iterator, context) { 179 iterator = iterator.bind(context);180 173 return this.map(function(value, index) { 181 return {value: value, criteria: iterator(value, index)}; 174 return { 175 value: value, 176 criteria: iterator.call(context, value, index) 177 }; 182 178 }).sort(function(left, right) { 183 179 var a = left.criteria, b = right.criteria;