Skip to content

入门指南

Radash 是新一代 Web 开发必备的库。它的特点是强类型和零依赖,采用 TypeScript 编写,舍弃了 Lodash 中逐渐过时的函数,推出了众多前所未见但一直想要的新功能

ts
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 的逻辑分支抽象出来,并提供了类似错误优先回调函数的响应。

ts
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 第三方依赖

ts
import { uid } from "radash";

uid(7); // => edQgwYS
uid(20, "*"); // => 0uRZxnuCbmaIi*JPJ4Au

pick

pick 用来从对象中选取所需的属性

ts
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,删除对象中不需要的属性

ts
import { omit } from "radash";

const fish = {
  name: "Bass",
  weight: 8,
  source: "lake",
  brackish: false,
};

omit(fish, ["name", "source"]); // => {weight: 8, brackish: false}

retry

retry() 用于重试失败的异步操作。它接受一个异步操作函数、一个重试次数以及一个延迟时间作为参数,并在操作失败时不断重试,直到操作成功或达到指定的最大重试次数。

ts
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() 函数,可以极大地简化这一过程。

ts
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 的目标是提供你需要的强大函数,并且以清晰易懂的类型和源代码来实现。