/* 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"); // FIXME: Is this worthless since you can do: if(name in obj) // is this the right place for this? dojo.lang.has = function(obj, name){ try{ return (typeof obj[name] != "undefined"); }catch(e){ return false; } } dojo.lang.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; } } dojo.lang.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){ // ff 1.5 compat 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= 3) { dojo.raise("thisObject doesn't exist!"); } thisObject = dj_global; } var 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; } } /** * Creates a 1-D array out of all the arguments passed, * unravelling any array-like objects in the process * * Ex: * unnest(1, 2, 3) ==> [1, 2, 3] * unnest(1, [2, [3], [[[4]]]]) ==> [1, 2, 3, 4] */ dojo.lang.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; } /** * Converts an array-like object (i.e. arguments, DOMCollection) * to an array **/ dojo.lang.toArray = function(arrayLike, startOffset) { var array = []; for(var i = startOffset||0; i < arrayLike.length; i++) { array.push(arrayLike[i]); } return array; }