/* Array utilities. */ var arrays = { /* Like Python's |range|, but without |step|. */ range: function(start, stop) { if (stop === undefined) { stop = start; start = 0; } var result = new Array(Math.max(0, stop - start)); for (var i = 0, j = start; j < stop; i++, j++) { result[i] = j; } return result; }, find: function(array, callback) { var length = array.length; for (var i = 0; i < length; i++) { if (callback(array[i])) { return array[i]; } } }, indexOf: function(array, callback) { var length = array.length; for (var i = 0; i < length; i++) { if (callback(array[i])) { return i; } } return -1; }, contains: function(array, value) { /* * 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) { var length = array.length; for (var i = 0; i < length; i++) { callback(array[i], i); } }, map: function(array, callback) { var result = []; var length = array.length; for (var i = 0; i < length; i++) { result[i] = callback(array[i], i); } return result; }, pluck: function(array, key) { return arrays.map(array, function (e) { return e[key]; }); } }; module.exports = arrays;