New file |
0,0 → 1,174 |
/* |
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; |
}}); |
|