UNPKG

@josecarlosrz/array-helper

Version:

Array helper to have async behavior and some util methods

254 lines (148 loc) 5.56 kB
const shuffle = require('./shuffle'); class ArrayHelper { static async forEach(array, closure) { let thisArg; if (arguments.length > 2) thisArg = arguments[2]; for (let i = 0; i < array.length; i++) { if (!(i in array)) continue; await closure.call(thisArg, array[i], i, array); } } static async map(array, closure) { let thisArg; if (arguments.length > 2) thisArg = arguments[2]; const responses = []; for (let i = 0; i < array.length; i++) { if (!(i in array)) continue; responses.push(await closure.call(thisArg, array[i], i, array)); } return responses; } static async filter(array, closure) { let thisArg; if (arguments.length > 2) thisArg = arguments[2]; const newArray = []; for (let i = 0; i < array.length; i++) { if (!(i in array)) continue; if (await closure.call(thisArg, array[i], i, array)) newArray.push(array[i]); } return newArray; } static async some(array, closure) { let thisArg; if (arguments.length > 2) thisArg = arguments[2]; for (let i = 0; i < array.length; i++) { if (!(i in array)) continue; if (await closure.call(thisArg, array[i], i, array)) return true; } return false; } static async every(array, closure) { let thisArg; if (arguments.length > 2) thisArg = arguments[2]; for (let i = 0; i < array.length; i++) { if (!(i in array)) continue; if (!await closure.call(thisArg, array[i], i, array)) return false; } return true; } static async find(array, closure) { let thisArg; if (arguments.length > 2) thisArg = arguments[2]; for (let i = 0; i < array.length; i++) { if (await closure.call(thisArg, array[i], i, array)) return array[i]; } } static async findIndex(array, closure) { let thisArg; if (arguments.length > 2) thisArg = arguments[2]; for (let i = 0; i < array.length; i++) { if (await closure.call(thisArg, array[i], i, array)) return i; } return -1; } static async reduce(array, closure) { let value; if (arguments.length > 2) { value = arguments[2]; } else if (array.length > 0) { value = array[0]; } else { throw new TypeError('Reduce of empty array with no initial value'); } for (let i = 0; i < array.length; i++) value = await closure(value, array[i], i, array); return value; } static async reduceRight(array, closure) { let value; if (arguments.length > 2) { value = arguments[2]; } else if (array.length > 0) { value = array[0]; } else { throw new TypeError('Reduce of empty array with no initial value'); } for (let i = array.length - 1; i >= 0; i--) value = await closure(value, array[i], i, array); return value; } static areEqual(a, b) { if (a === b) return true; if (a === null || b === null) throw new TypeError('Arguments must be both arrays'); if (a.length !== b.length) return false; for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) return false; } return true; } static chunk(array, chunks = 2) { const chunksArray = []; for (let i = 0; i < array.length; i += chunks) chunksArray.push(array.slice(i, i + chunks)); return chunksArray; } static unique(array) { return array.filter((value, index, that) => that.indexOf(value) === index); } static shuffle(array) { return shuffle(array); } } module.exports = ArrayHelper;