"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