array.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:4k
- /*
- Copyright (c) 2004-2006, The Dojo Foundation
- All Rights Reserved.
- Licensed under the Academic Free License version 2.1 or above OR the
- modified BSD license. For more information on Dojo licensing, see:
- http://dojotoolkit.org/community/licensing.shtml
- */
- dojo.provide("dojo.lang.array");
- dojo.require("dojo.lang.common");
- dojo.lang.mixin(dojo.lang, {has:function (obj, name) {
- try {
- return typeof obj[name] != "undefined";
- }
- catch (e) {
- return false;
- }
- }, isEmpty:function (obj) {
- if (dojo.lang.isObject(obj)) {
- var tmp = {};
- var count = 0;
- for (var x in obj) {
- if (obj[x] && (!tmp[x])) {
- count++;
- break;
- }
- }
- return count == 0;
- } else {
- if (dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)) {
- return obj.length == 0;
- }
- }
- }, map:function (arr, obj, unary_func) {
- var isString = dojo.lang.isString(arr);
- if (isString) {
- arr = arr.split("");
- }
- if (dojo.lang.isFunction(obj) && (!unary_func)) {
- unary_func = obj;
- obj = dj_global;
- } else {
- if (dojo.lang.isFunction(obj) && unary_func) {
- var tmpObj = obj;
- obj = unary_func;
- unary_func = tmpObj;
- }
- }
- if (Array.map) {
- var outArr = Array.map(arr, unary_func, obj);
- } else {
- var outArr = [];
- for (var i = 0; i < arr.length; ++i) {
- outArr.push(unary_func.call(obj, arr[i]));
- }
- }
- if (isString) {
- return outArr.join("");
- } else {
- return outArr;
- }
- }, reduce:function (arr, initialValue, obj, binary_func) {
- var reducedValue = initialValue;
- if (arguments.length == 2) {
- binary_func = initialValue;
- reducedValue = arr[0];
- arr = arr.slice(1);
- } else {
- if (arguments.length == 3) {
- if (dojo.lang.isFunction(obj)) {
- binary_func = obj;
- obj = null;
- }
- } else {
- if (dojo.lang.isFunction(obj)) {
- var tmp = binary_func;
- binary_func = obj;
- obj = tmp;
- }
- }
- }
- var ob = obj || dj_global;
- dojo.lang.map(arr, function (val) {
- reducedValue = binary_func.call(ob, reducedValue, val);
- });
- return reducedValue;
- }, forEach:function (anArray, callback, thisObject) {
- if (dojo.lang.isString(anArray)) {
- anArray = anArray.split("");
- }
- if (Array.forEach) {
- Array.forEach(anArray, callback, thisObject);
- } else {
- if (!thisObject) {
- thisObject = dj_global;
- }
- for (var i = 0, l = anArray.length; i < l; i++) {
- callback.call(thisObject, anArray[i], i, anArray);
- }
- }
- }, _everyOrSome:function (every, arr, callback, thisObject) {
- if (dojo.lang.isString(arr)) {
- arr = arr.split("");
- }
- if (Array.every) {
- return Array[every ? "every" : "some"](arr, callback, thisObject);
- } else {
- if (!thisObject) {
- thisObject = dj_global;
- }
- for (var i = 0, l = arr.length; i < l; i++) {
- var result = callback.call(thisObject, arr[i], i, arr);
- if (every && !result) {
- return false;
- } else {
- if ((!every) && (result)) {
- return true;
- }
- }
- }
- return Boolean(every);
- }
- }, every:function (arr, callback, thisObject) {
- return this._everyOrSome(true, arr, callback, thisObject);
- }, some:function (arr, callback, thisObject) {
- return this._everyOrSome(false, arr, callback, thisObject);
- }, filter:function (arr, callback, thisObject) {
- var isString = dojo.lang.isString(arr);
- if (isString) {
- arr = arr.split("");
- }
- var outArr;
- if (Array.filter) {
- outArr = Array.filter(arr, callback, thisObject);
- } else {
- if (!thisObject) {
- if (arguments.length >= 3) {
- dojo.raise("thisObject doesn't exist!");
- }
- thisObject = dj_global;
- }
- outArr = [];
- for (var i = 0; i < arr.length; i++) {
- if (callback.call(thisObject, arr[i], i, arr)) {
- outArr.push(arr[i]);
- }
- }
- }
- if (isString) {
- return outArr.join("");
- } else {
- return outArr;
- }
- }, unnest:function () {
- var out = [];
- for (var i = 0; i < arguments.length; i++) {
- if (dojo.lang.isArrayLike(arguments[i])) {
- var add = dojo.lang.unnest.apply(this, arguments[i]);
- out = out.concat(add);
- } else {
- out.push(arguments[i]);
- }
- }
- return out;
- }, toArray:function (arrayLike, startOffset) {
- var array = [];
- for (var i = startOffset || 0; i < arrayLike.length; i++) {
- array.push(arrayLike[i]);
- }
- return array;
- }});