Utility functions cleanup: Cleanup lib/utils/arrays.js

redux
David Majda 10 years ago
parent 5adad3ae12
commit 50b2054fbf

@ -177,7 +177,7 @@ function generateBytecode(ast) {
var consts = []; var consts = [];
function addConst(value) { function addConst(value) {
var index = arrays.indexOf(consts, function(c) { return c === value; }); var index = arrays.indexOf(consts, value);
return index === -1 ? consts.push(value) - 1 : index; return index === -1 ? consts.push(value) - 1 : index;
} }

@ -1,65 +1,76 @@
/* Array utilities. */ /* Array utilities. */
var arrays = { var arrays = {
/* Like Python's |range|, but without |step|. */
range: function(start, stop) { range: function(start, stop) {
if (stop === undefined) { var length = stop - start,
stop = start; result = new Array(length),
start = 0; i;
}
var result = new Array(Math.max(0, stop - start)); for (i = 0, j = start; i < length; i++, j++) {
for (var i = 0, j = start; j < stop; i++, j++) {
result[i] = j; result[i] = j;
} }
return result; return result;
}, },
find: function(array, callback) { find: function(array, valueOrPredicate) {
var length = array.length; var length = array.length, i;
for (var i = 0; i < length; i++) {
if (callback(array[i])) { if (typeof valueOrPredicate === "function") {
return array[i]; for (i = 0; i < length; i++) {
if (valueOrPredicate(array[i])) {
return array[i];
}
}
} else {
for (i = 0; i < length; i++) {
if (array[i] === valueOrPredicate) {
return array[i];
}
} }
} }
}, },
indexOf: function(array, callback) { indexOf: function(array, valueOrPredicate) {
var length = array.length; var length = array.length, i;
for (var i = 0; i < length; i++) {
if (callback(array[i])) { if (typeof valueOrPredicate === "function") {
return i; for (i = 0; i < length; i++) {
if (valueOrPredicate(array[i])) {
return i;
}
}
} else {
for (i = 0; i < length; i++) {
if (array[i] === valueOrPredicate) {
return i;
}
} }
} }
return -1; return -1;
}, },
contains: function(array, value) { contains: function(array, valueOrPredicate) {
/* return arrays.indexOf(array, valueOrPredicate) !== -1;
* Stupid IE does not have Array.prototype.indexOf, otherwise this function
* would be a one-liner.
*/
var length = array.length;
for (var i = 0; i < length; i++) {
if (array[i] === value) {
return true;
}
}
return false;
}, },
each: function(array, callback) { each: function(array, iterator) {
var length = array.length; var length = array.length, i;
for (var i = 0; i < length; i++) {
callback(array[i], i); for (i = 0; i < length; i++) {
iterator(array[i], i);
} }
}, },
map: function(array, callback) { map: function(array, iterator) {
var result = []; var length = array.length,
var length = array.length; result = new Array(length),
for (var i = 0; i < length; i++) { i;
result[i] = callback(array[i], i);
for (i = 0; i < length; i++) {
result[i] = iterator(array[i], i);
} }
return result; return result;
}, },

Loading…
Cancel
Save