const bifurcate = (arr, filter) =>
arr.reduce((acc, val, i) => (acc[filter[i] ? 0 : 1].push(val), acc), [[], []]);
const r = bifurcate(['beep', 'boop', 'foo', 'bar'], [true, true, false, true]);
console.log(r); // [ [ 'beep', 'boop', 'bar' ], [ 'foo' ] ]
我试图了解代码的工作原理。
我首先要做的是尝试在reduce函数的回调中使用console.log来查看那里的值。但是我失败了,因为我无法在函数中放置console.log
// FAILURE CODE
const bifurcate = (arr, filter) =>
arr.reduce((acc, val, i) => {
return (acc[filter[i] ? 0 : 1].push(val), acc), [[], []];
});
这是我遇到的错误:
ERROR : TypeError: acc[(intermediate value)(intermediate value)(intermediate value)].push is not a function at arr.reduce (C:\Users\1nept\project\Connector\test.js:19:36)
据我所知,如果箭头函数中没有大括号,则返回值就是箭头后的表达式结果。 因此,上归约代码是相同的。
但令人惊讶的是,最下面的一个导致错误。 我不知道为什么。
答案 0 :(得分:0)
您将两个参数传递给Array.prototype.reduce
:
const bifurcate = (arr, filter) => arr.reduce(
// first argument
(acc, val, i) => (acc[filter[i] ? 0 : 1].push(val), acc),
// second argument
[[], []]
);
带有花括号的正确版本为:
const bifurcate = (arr, filter) => arr.reduce(
// first argument
(acc, val, i) => {
acc[filter[i] ? 0 : 1].push(val);
return acc;
},
// second argument
[[], []]
);