Radash
  1. 入门指南
  2. 入门指南

入门指南

欢迎来到 2020 年代

Radash 是下一个你无法离开的库。首先,它非常强大。通过这些强大的函数,你将获得强类型和零依赖。如果你能稍微放手一试这些函数,我毫不怀疑你会发现自己爱上它们。

精选函数

来吧,试试水。以下是我们再也无法离开的一些函数。希望你也会发现它们很有用。

try

_.try 函数抽象了 try/catch 的逻辑分支,并提供了一种类似 error first callback 的响应。

const [err, response] = await _.try(api.gods.create)({ name: 'Ra' })
if (err) {
  throw new Error('Your god is weak and could not be created')
}

range

_.range 函数返回一个生成器,可用于迭代。这意味着你再也不必编写 for (let i) 循环了 — 也不应该。

for (const i of _.range(0, 4)) {
  console.log(i) // 0, 1, 2, 3, 4
}

for (const i of _.range(10, 20, 2)) {
  console.log(i) // 10, 12, 14, 16, 18, 20
}

select

_.select 函数接受一个映射器和过滤器函数,并在单个迭代中同时运行它们。不再需要编写 reduce,因为你需要映射和过滤,也不想为了性能而分别实现它们。

const superPoweredGodsFromEgypt = _.select(
  gods, 
  g => ({ ...g, power: g.power * g.power }), 
  g => g.culture === 'egypt'
)

延迟执行

_.defer 函数允许您注册函数以在运行异步函数时作为清理运行。它类似于 try/finally,但您可以在特定时间注册 finally 块。

await _.defer(async (defer) => {
  await api.builds.updateStatus('in-progress')
  defer((err) => {
    api.builds.updateStatus(err ? 'failed' : 'success')
  })

  fs.mkdir('build')
  defer(() => {
    fs.unlink('build')
  })

  await build()
})

objectify

_.objectify 函数帮助您将列表一步转换为对象。通常,我们要么分两步进行,要么编写一个 reduce。

const godsByCulture = _.objectify(gods, g => g.name, g => g.culture)

爱与恨

Lodash

Lodash 真是太棒了。在 JavaScript 还在发展阶段时,它提供了执行一些在原生 JavaScript 中难以实现的功能的能力。那是上一个十年。在这个十年里,需求已经有所不同了。Radash 的目标是为您提供所需的强大函数,而不是运行时现在提供的函数,并且使用出色的类型和易于阅读和理解的源代码来实现。

拒绝

Radash 不提供 _.map_.filter 函数。在可选链和空值合并之前,它们确实很有帮助。现在,实际上已经没有必要了。

在过去的十年中,JavaScript 社区作为一个整体,特别是 TypeScript 社区,已经更加接近一些关键价值观:确定性是好的,多态性是不好的,强类型是一切。Lodash 的魅力之一在于它允许您向函数传递不同类型,并根据类型获得不同的行为。一个例子是 _.map 函数,它可以接受一个集合或一个对象,并对它们进行映射。Radash 不提供这种多态行为。

抱歉,不抱歉。