if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.array"] = true; dojo.require("dojo._base.lang"); dojo.provide("dojo._base.array"); (function(){ var _getParts = function(arr, obj, cb){ return [ dojo.isString(arr) ? arr.split("") : arr, obj || dojo.global, // FIXME: cache the anonymous functions we create here? dojo.isString(cb) ? new Function("item", "index", "array", cb) : cb ]; }; dojo.mixin(dojo, { indexOf: function( /*Array*/ array, /*Object*/ value, /*Integer?*/ fromIndex, /*Boolean?*/ findLast){ // summary: // locates the first index of the provided value in the // passed array. If the value is not found, -1 is returned. // description: // For details on this method, see: // var step = 1, end = array.length || 0, i = 0; if(findLast){ i = end - 1; step = end = -1; } if(fromIndex != undefined){ i = fromIndex; } if((findLast && i > end) || i < end){ for(; i != end; i += step){ if(array[i] == value){ return i; } } } return -1; // Number }, lastIndexOf: function(/*Array*/array, /*Object*/value, /*Integer?*/fromIndex){ // summary: // locates the last index of the provided value in the passed array. // If the value is not found, -1 is returned. // description: // For details on this method, see: // return dojo.indexOf(array, value, fromIndex, true); // Number }, forEach: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ // summary: // for every item in arr, callback is invoked. Return values are ignored. // arr: the array to iterate on. If a string, operates on individual characters. // callback: a function is invoked with three arguments: item, index, and array // thisObject: may be used to scope the call to callback // description: // This function corresponds to the JavaScript 1.6 Array.forEach() method. // In environments that support JavaScript 1.6, this function is a passthrough to the built-in method. // For more details, see: // // match the behavior of the built-in forEach WRT empty arrs if(!arr || !arr.length){ return; } // FIXME: there are several ways of handilng thisObject. Is // dojo.global always the default context? var _p = _getParts(arr, thisObject, callback); arr = _p[0]; for(var i=0,l=_p[0].length; i // example: // | dojo.every([1, 2, 3, 4], function(item){ return item>1; }); // returns false // example: // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); // returns true return this._everyOrSome(true, arr, callback, thisObject); // Boolean }, some: function(/*Array|String*/arr, /*Function|String*/callback, /*Object?*/thisObject){ // summary: // Determines whether or not any item in arr satisfies the // condition implemented by callback. // arr: the array to iterate on. If a string, operates on individual characters. // callback: a function is invoked with three arguments: item, index, and array and returns true // if the condition is met. // thisObject: may be used to scope the call to callback // description: // This function corresponds to the JavaScript 1.6 Array.some() method. // In environments that support JavaScript 1.6, this function is a passthrough to the built-in method. // For more details, see: // // example: // | dojo.some([1, 2, 3, 4], function(item){ return item>1; }); // returns true // example: // | dojo.some([1, 2, 3, 4], function(item){ return item<1; }); // returns false return this._everyOrSome(false, arr, callback, thisObject); // Boolean }, map: function(/*Array|String*/arr, /*Function|String*/callback, /*Function?*/thisObject){ // summary: // applies callback to each element of arr and returns // an Array with the results // arr: the array to iterate on. If a string, operates on individual characters. // callback: a function is invoked with three arguments: item, index, and array and returns a value // thisObject: may be used to scope the call to callback // description: // This function corresponds to the JavaScript 1.6 Array.map() method. // In environments that support JavaScript 1.6, this function is a passthrough to the built-in method. // For more details, see: // // example: // | dojo.map([1, 2, 3, 4], function(item){ return item+1 }); // returns [2, 3, 4, 5] var _p = _getParts(arr, thisObject, callback); arr = _p[0]; var outArr = (arguments[3] ? (new arguments[3]()) : []); for(var i=0;i // example: // | dojo.filter([1, 2, 3, 4], function(item){ return item>1; }); // returns [2, 3, 4] var _p = _getParts(arr, thisObject, callback); arr = _p[0]; var outArr = []; for(var i = 0; i < arr.length; i++){ if(_p[2].call(_p[1], arr[i], i, arr)){ outArr.push(arr[i]); } } return outArr; // Array } }); })(); }