여기에서 많은 답변 Array.prototype.reduce을 사용하여 가변 누산기를 구축하고 큰 배열의 경우 스프레드 연산자를 사용하여 반복 할 때마다 새 배열을 복사하는 것보다 더 효율적임을 지적합니다. 단점은 짧은 람다 구문을 사용하는 "순수한"표현식만큼 예쁘지 않다는 것입니다.
그러나 그 방법은 쉼표 연산자를 사용하는 것입니다. C와 유사한 언어에서 쉼표는 항상 오른손 피연산자를 반환하는 연산자입니다. 이를 사용하여 void 함수를 호출하고 값을 반환하는 식을 만들 수 있습니다.
function partition(array, predicate) {
return array.reduce((acc, item) => predicate(item)
? (acc[0].push(item), acc)
: (acc[1].push(item), acc), [[], []]);
}
부울 표현식이 암시 적으로 0과 1로 숫자로 캐스팅된다는 사실을 활용하면 읽을 수 있다고 생각하지 않지만 훨씬 더 간결하게 만들 수 있습니다.
function partition(array, predicate) {
return array.reduce((acc, item) => (acc[+!predicate(item)].push(item), acc), [[], []]);
}
용법:
const [trues, falses] = partition(['aardvark', 'cat', 'apple'], i => i.startsWith('a'));
console.log(trues);
console.log(falses);