var econda; (function (econda) { var util; (function (util) { /** * Array helper functions * @class econda.util.ArrayUtils * @static */ var ArrayUtils = (function () { function ArrayUtils() { } /** * Returns index of needle in array obj * * @method * @param {Array} arr array to search in * @param {Object/string/number} needle array item to search for * @return {number} needle found at index or -1 if needle was not found */ ArrayUtils.indexOf = function (arr, needle) { if (Array.prototype.indexOf) { return arr.indexOf(needle); } else { for (var n = 0; n < arr.length; n++) { if (arr[n] == needle) { return n; } } return -1; } }; /** * Returns true if array contains needle. * * var myArr = ["one", "two"]; * console.log(econda.util.ArrayUtils.contains('one')); * // => true * * @method * @param {Array} arr array to search in * @param {Object/string/number} needle array item to search for * @return {number} true if needle was found */ ArrayUtils.contains = function (arr, needle) { return (ArrayUtils.indexOf(arr, needle) > -1); }; /** * Check if parm is an array * @param {Mixed} obj * @returns {Boolean} */ ArrayUtils.isArray = function (obj) { if (!this.isArrayFn) { this.isArrayFn = (typeof Array.isArray != "undefined") ? Array.isArray : function (obj) { return Object.prototype.toString.call(obj) === '[object Array]'; }; } return this.isArrayFn(obj); }; /** * Shuffels the items in an array. * @param {Array} arr */ ArrayUtils.shuffle = function (arr) { var m = arr.length, t, i; while (m) { // pick a remaining element i = Math.floor(Math.random() * m--); // swap it with the current element t = arr[m]; arr[m] = arr[i]; arr[i] = t; } return arr; }; /** * Remove one or multiple items from an array * @param {Object[]} arr * @param {Object/Object[]} itemOrItemsToRemove */ ArrayUtils.remove = function (arr, itemOrItemsToRemove) { if (typeof itemOrItemsToRemove === 'function') { return this._removeByFunction(arr, itemOrItemsToRemove); } var itemsToRemove = ArrayUtils.isArray(itemOrItemsToRemove) ? itemOrItemsToRemove : [itemOrItemsToRemove]; return this._removeItems(arr, itemsToRemove); }; /// @private ArrayUtils._removeItems = function (arr, itemsToRemove) { var itemsRemoved = []; for (var i = 0; i < itemsToRemove.length; i++) { var index = arr.indexOf(itemsToRemove[i]); if (index > -1) { itemsRemoved = itemsRemoved.concat(arr.splice(index, 1)); } } return itemsRemoved; }; /// @private ArrayUtils._removeByFunction = function (arr, filterFunction) { var itemsRemoved = []; for (var n = 0; n < arr.length; n++) { if (filterFunction(arr[n], n, arr) === true) { itemsRemoved = itemsRemoved.concat(arr.splice(n, 1)); n--; } } return itemsRemoved; }; /** * Filter array using a callback function. Will return a filtered array and not modify the input array. * @param {Object[]} arr array to filter * @param {Function} filterFunction callback function * @returns {Object[]} filtered array */ ArrayUtils.filter = function (arr, filterFunction) { if (typeof filterFunction !== 'function') { return arr; } if (typeof arr.filter === 'function') { return arr.filter(filterFunction); } var ret = []; for (var n = 0; n < arr.length; n++) { if (filterFunction(arr[n], n, arr) === true) { ret.push(arr[n]); } } return ret; }; ArrayUtils.isArrayFn = null; return ArrayUtils; }()); util.ArrayUtils = ArrayUtils; // end of class })(util = econda.util || (econda.util = {})); })(econda || (econda = {})); // end of module