简介根据条件将数组分成两个集合。// 该源码来自于 https://30secondsofcode.orgconst bifurcateBy = (arr, fn) => arr.reduce((acc, val, i) => (acc[fn(val, i) ? 0 : 1].push(val), acc), [[], []])代码分析这个代码主要是利用了 Array.prototype.reduce 和 Array.prototype.push,一边遍历一边进行归集。其中巧妙之处是一个逗号表达式来在对 acc 进行操作后并返回 acc的值。下面举一个简单的例子:let acc = []let pushed = (acc.push(2), acc)// 输出 [2]console.log(pushed)使用场景将及格和不及格成绩的同学进行分组,当然也可以用 Array.prototype.filter 直接获得及格和不及格成绩。const CUT_OFF_SCORES = 60const students = [ { name: ‘xiaoer’, score: 80 }, { name: ‘xiaosi’, score: 90 }, { name: ‘menty’, score: 50 },]const group = bifurcateBy(students, (student) => student.score >= CUT_OFF_SCORES)相似代码根据条件数组来对原数组进行分类,例如 bifurcate([‘beep’, ‘boop’], [true, false])。// 该源码来自于 https://30secondsofcode.orgconst bifurcate = (arr, filter) => arr.reduce((acc, val, i) => (acc[filter[i] ? 0 : 1].push(val), acc), [[], []])打赏&联系如果您感觉有收获,欢迎给我打赏,以激励我输出更多的优质内容。本文原稿来自 PushMeTop