Blame | Last modification | View Log | RSS feed
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:
// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf
var i = 0, step = 1, end = array.length;
if(findLast){
i = end - 1;
step = end = -1;
}
for(i = fromIndex || i; 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:
// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:lastIndexOf
return dojo.indexOf(array, value, fromIndex, true); // Number
},
forEach: function(/*Array*/arr, /*Function*/callback, /*Object?*/obj){
// summary:
// for every item in arr, call callback with that item as its
// only parameter.
// description:
// Return values are ignored. This function
// corresponds (and wraps) the JavaScript 1.6 forEach method. For
// more details, see:
// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:forEach
// 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, obj, callback); arr = _p[0];
for(var i=0,l=_p[0].length; i<l; i++){
_p[2].call(_p[1], arr[i], i, arr);
}
},
_everyOrSome: function(/*Boolean*/every, /*Array*/arr, /*Function*/callback, /*Object?*/obj){
var _p = _getParts(arr, obj, callback); arr = _p[0];
for(var i = 0, l = arr.length; i < l; i++){
var result = !!_p[2].call(_p[1], arr[i], i, arr);
if(every ^ result){
return result; // Boolean
}
}
return every; // Boolean
},
every: function(/*Array*/arr, /*Function*/callback, /*Object?*/thisObject){
// summary:
// Determines whether or not every item in the array satisfies the
// condition implemented by callback.
// description:
// The parameter thisObject may be used to
// scope the call to callback. The function signature is derived
// from the JavaScript 1.6 Array.every() function. More
// information on this can be found here:
// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:every
// 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*/arr, /*Function*/callback, /*Object?*/thisObject){
// summary:
// Determines whether or not any item in the array satisfies the
// condition implemented by callback.
// description:
// The parameter thisObject may be used to
// scope the call to callback. The function signature is derived
// from the JavaScript 1.6 Array.some() function. More
// information on this can be found here:
// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some
// 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*/arr, /*Function*/func, /*Function?*/obj){
// summary:
// applies a function to each element of an Array and creates
// an Array with the results
// description:
// Returns a new array constituted from the return values of
// passing each element of arr into unary_func. The obj parameter
// may be passed to enable the passed function to be called in
// that scope. In environments that support JavaScript 1.6, this
// function is a passthrough to the built-in map() function
// provided by Array instances. For details on this, see:
// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:map
// example:
// | dojo.map([1, 2, 3, 4], function(item){ return item+1 });
// returns [2, 3, 4, 5]
var _p = _getParts(arr, obj, func); arr = _p[0];
var outArr = ((arguments[3]) ? (new arguments[3]()) : []);
for(var i=0;i<arr.length;++i){
outArr.push(_p[2].call(_p[1], arr[i], i, arr));
}
return outArr; // Array
},
filter: function(/*Array*/arr, /*Function*/callback, /*Object?*/obj){
// summary:
// Returns a new Array with those items from arr that match the
// condition implemented by callback. ob may be used to
// scope the call to callback. The function signature is derived
// from the JavaScript 1.6 Array.filter() function.
//
// More information on the JS 1.6 API can be found here:
// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:filter
// example:
// | dojo.filter([1, 2, 3, 4], function(item){ return item>1; });
// returns [2, 3, 4]
var _p = _getParts(arr, obj, 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
}
});
})();
}