"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * @module array */ /** * Slice the array by one element * * @param {Array} array * @return {Array} */ var slice1 = function slice1(array) { return Array.prototype.slice.call(array, 1); }; exports.slice1 = slice1; /** * Search if the array has an element. * Shortcut for indexOf !== -1 * * @param {Array} array * @param {*} searchElement * @param {Number} i * @return {Boolean} */ var has = function has(array, searchElement, i) { return Array.prototype.indexOf.call(array, searchElement, i) !== -1; }; exports.has = has; /** * Search if the array has an element among provided elements. * Shortcut for indexOf !== -1 * * @param {Array} array * @param {Array} searchElements * @param {Number} i * @return {Boolean} */ var hasAmong = function hasAmong(array, searchElements, i) { for (var j = 0, l = searchElements.length; j < l; j++) { if (Array.prototype.indexOf.call(array, searchElements[j], i) !== -1) { return true; } } return false; }; exports.hasAmong = hasAmong; /** * Remove an element in an array * * @param {Array} array * @param {*} element * @return {Boolean} */ var remove = function remove(array, element) { var index = array.indexOf(element); if (index === -1) { return false; } array.splice(index, 1); return index; }; exports.remove = remove; /** * Clone an array * * @param {Array} array * @return {Array} cloned array */ var clone = function clone(array) { return array.slice(0); }; exports.clone = clone; /** * Last element in an array * * @param {Array} array * @return {*} last element */ var last = function last(array) { return array[array.length - 1]; }; exports.last = last; /** * Random element in an array * * @param {Array} array * @return {*} last element */ var random = function random(array) { return array[Math.floor(Math.random() * array.length)]; }; exports.random = random; /** * Sort functions * * @type {Object} */ var sortFunctions = { "": function (a, b) { if (a < b) { return -1; } if (a > b) { return 1; } return 0; }, number: function number(a, b) { return a - b; }, string: function string(a, b) { return a.localeCompare(b); } }; exports.sortFunctions = sortFunctions; var sortF = sortFunctions; exports.sortF = sortF; /** * Sorts an array by a property * * @param {Array} array * @param {String} propertyName * @param {?Boolean} descending * @param {Function|String|undefined} sortFunction * @return {Array} */ var sortBy = function sortBy(array, propertyName, descending, sortFunction) { if (typeof descending === "string" || typeof descending === "function") { sortFunction = descending; descending = undefined; } if (typeof sortFunction !== "function") { sortFunction = sortFunctions[sortFunction == null ? "" : sortFunction]; } return array.sort(descending ? function (b, a) { return sortFunction(a[propertyName], b[propertyName]); } : function (a, b) { return sortFunction(a[propertyName], b[propertyName]); }); }; exports.sortBy = sortBy; /* findBy: use Array.prototype.find((v) => v.propertyName === value); */ /* findIndexBy: use Array.prototype.findIndex((v) => v.propertyName === value); */ /** * The removeWhen() method removes elements * when element pass the test implemented by the provided function. * * @param {Array} array * @param {Function} callback * @return {Number} the new array's length */ var removeWhen = function removeWhen(array, callback) { array.forEach(function (elt, index) { if (callback(elt, index)) { array.splice(index, 1); } }); return array.length; }; exports.removeWhen = removeWhen; /** * Tests if an array equals another * * @param {Array} array1 * @param {Array} array2 * @return {Boolean} */ var equals = function equals(array1, array2) { var length = array1.length; if (!Array.isArray(array1) || !Array.isArray(array2) || length != array2.length) { return false; } for (var i = 0; i < length; i++) { if (array1[i] !== array2[i]) { return false; } } return true; }; exports.equals = equals; //# sourceMappingURL=array.js.map