This function partitions an array into two arrays based on a condition.
JavaScript:
let partition = (arr, pred) => arr.reduce(([pass, fail], elem) => pred(elem) ? [[...pass, elem], fail] : [pass, [...fail, elem]], [[], []]);
// Example
console.log(partition([1, 2, 3, 4, 5], n => n % 2)); // [[1, 3, 5], [2, 4]]
console.log(partition(['apple', 'banana', 'cherry'], fruit => fruit[0] === 'a')); // [['apple'], ['banana', 'cherry']]
TypeScript:
let partition = (arr: T[], pred: (arg: T) => boolean): [T[], T[]] => arr.reduce(([pass, fail], elem) => pred(elem) ? [[...pass, elem], fail] : [pass, [...fail, elem]], [[], []]);
// Example
console.log(partition([1, 2, 3, 4, 5], n => n % 2)); // [[1, 3, 5], [2, 4]]
console.log(partition(['apple', 'banana', 'cherry'], fruit => fruit[0] === 'a')); // [['apple'], ['banana', 'cherry']]