New file |
0,0 → 1,167 |
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 |
} |
}); |
})(); |
|
} |