1

简介

数组、拆分

根据条件将数组分成两个集合。

// 该源码来自于 https://30secondsofcode.org
const 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 = 60
const 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.org
const bifurcate = (arr, filter) =>
  arr.reduce((acc, val, i) => (acc[filter[i] ? 0 : 1].push(val), acc), [[], []])

一起成长

在困惑的城市里总少不了并肩同行的 伙伴 让我们一起成长。
  • 如果您想让更多人看到文章可以点个 点赞
  • 如果您想激励小二可以到 Github 给个 小星星
  • 如果您想与小二更多交流添加微信 m353839115

微信公众号

本文原稿来自 PushMeTop

zhangxiangliang
1.5k 声望72 粉丝

假如我年少有为