入门指南
Radash 是新一代 Web 开发必备的库。它的特点是强类型和零依赖,采用 TypeScript 编写,舍弃了 Lodash 中逐渐过时的函数,推出了众多前所未见但一直想要的新功能
import * as _ from "radash";
const gods = [
{ name: "Ra", power: "sun", rank: 100, culture: "egypt" },
{ name: "Loki", power: "tricks", rank: 72, culture: "norse" },
{ name: "Zeus", power: "lightning", rank: 96, culture: "greek" },
];
_.max(gods, (g) => g.rank); // => ra
_.sum(gods, (g) => g.rank); // => 268
_.fork(gods, (g) => g.culture === "norse"); // => [[loki], [ra, zeus]]
_.sort(gods, (g) => g.rank); // => [ra, zeus, loki]
_.boil(gods, (a, b) => (a.rank > b.rank ? a : b)); // => ra
_.objectify(
gods,
(g) => g.name.toLowerCase(),
(g) => _.pick(g, ["power", "rank", "culture"])
); // => { ra, zeus, loki }
精选功能
try
_.try
函数将 try/catch 的逻辑分支抽象出来,并提供了类似错误优先回调函数的响应。
const [err, response] = await _.try(api.gods.create)({ name: "Ra" });
if (err) {
throw new Error("Your god is weak and could not be created");
}
uid
uid
方法用于生成唯一标识符。所以你可以不用在项目中单独引入 nanoid 第三方依赖
import { uid } from "radash";
uid(7); // => edQgwYS
uid(20, "*"); // => 0uRZxnuCbmaIi*JPJ4Au
pick
pick
用来从对象中选取所需的属性
import { pick } from "radash";
const fish = {
name: "Bass",
weight: 8,
source: "lake",
barckish: false,
};
pick(fish, ["name", "source"]); // => {name: 'Bass', source: 'lake'}
omit
与 pick
相反的方法是 omit
,删除对象中不需要的属性
import { omit } from "radash";
const fish = {
name: "Bass",
weight: 8,
source: "lake",
brackish: false,
};
omit(fish, ["name", "source"]); // => {weight: 8, brackish: false}
retry
retry()
用于重试失败的异步操作。它接受一个异步操作函数、一个重试次数以及一个延迟时间作为参数,并在操作失败时不断重试,直到操作成功或达到指定的最大重试次数。
import { retry } from "radash";
await retry({ times: 2, delay: 1000 }, api.articles.list);
在这个例子中,retry()
函数尝试执行 api.articles.list 异步操作,如果操作失败,它会等待 1000 毫秒(即 1 秒)后重试,最多重试 2 次。
可以使用 retry()
函数来替代传统的异步重试库,因为它提供了更加简洁和灵活的接口。结合 Radash 的其他功能,如 tryit、parallel 等,可以轻松构建出高效且健壮的异步处理逻辑,以应对后端服务的各种不确定性。无论是处理网络请求、数据库操作还是其他异步任务,retry()
函数都能提供强大的容错能力,确保应用程序的稳定性和可靠性。
counting
counting()
函数用于统计类数组集合中各类元素的数量。它接收一个对象数组和一个回调函数,通过回调函数定义计数条件,并返回一个对象,其中包含了各类元素的数量。
传统上,可能需要使用循环和多个条件判断来实现类似的统计功能,代码较为繁琐。而使用 counting()
函数,可以极大地简化这一过程。
import { counting } from "radash";
const users = [
{ name: "Poorna", type: "engineer" },
{ name: "Widura", type: "manager" },
{ name: "Binara", type: "engineer" },
];
const typeCounts = counting(users, (user) => user.type);
console.log(typeCounts); // 输出: { engineer: 2, manager: 1 }
在这个例子中,定义了一个 users
数组,其中包含了不同角色的用户对象。通过调用 counting()
函数,并传入 users
数组和一个提取 type
属性的回调函数,得到了一个 typeCounts
对象,其中包含了每种类型的用户数量。
爱与恨
Lodash
Lodash 非常了不起。在 JavaScript 还在不断发展时,它为你提供了在原始代码中无法轻易实现的能力。那是上个十年。在这个十年里,需求有所不同。Radash 的目标是提供你需要的强大函数,并且以清晰易懂的类型和源代码来实现。