Source: array.js

Source: array.js

"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