Функция разделения Javascript / Typescript из реализации ramda - PullRequest
0 голосов
/ 04 апреля 2020

Черт, я работаю над реализацией R.partition из 'ramda'. без использования pu sh !! только используя карту, фильтр, уменьшить функции.

Это моя текущая реализация:

partition = <T>(func : (param : T) => boolean, arr : T[]): T[][] => {
return [arr.filter((element : T) => func(element)), arr.filter((element : T) => !func(element))];   

}

пример:

const func = (x) => x%2 == 0

const temp = [1,2,3,4 , 5,6,7,8,9]; console.log (раздел (fun c, tmep)); // => [[2,4,6,8], [1,3,5,7,9]

1 Ответ

0 голосов
/ 05 апреля 2020

Двойная фильтрация вносит ненужную сложность времени, нам не нужно итерировать здесь дважды.

Array#reduce - наш инструмент здесь:

const partition = (predicate, list) => list.reduce(
  
  ([left, right], item) => predicate(item) 
    ? [left.concat(item), right]
    : [left, right.concat(item)],
    
  [[], []],
  list
);

//===

const data = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const isOdd = n => n % 2;

const [odds, evens] = partition(isOdd, data);

console.log({ odds, evens });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...