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 } }); })(); }