Skip to content

castComparator

将值转换为比较器函数

230 bytes
since v12.2.0

使用方法

创建一个可以传递给 Array.prototype.sort 的比较器函数。它接受属性名或映射函数。可选地,您可以传递自定义比较函数(例如用于 localeCompare 使用场景)。

castComparator 的第一个参数称为 mapping。这可以是:

  • 函数:如果 mapping 是函数,它将输入值映射为可比较的值。
  • 属性名:如果 mapping 是属性名,它将输入值映射为输入值的具有可比较值的属性。
import * as _ from "radashi";
const users = [
{ id: 1, firstName: "Alice", lastName: "Smith" },
{ id: 3, firstName: "Charlie", lastName: "Brown" },
{ id: 2, firstName: "Drew", lastName: "Johnson" },
];
const compareById = _.castComparator("id");
users.sort(compareById);
// [Alice, Drew, Charlie]
const compareByFullName = _.castComparator(
(user) => `${user.firstName} ${user.lastName}`,
(a, b) => b.localeCompare(a)
);
users.sort(compareByFullName);
// [Alice, Charlie, Drew]

比较函数

可选地,您可以传递一个接收映射值并返回数字的自定义 compare 函数。如果未提供,值将使用内置的 <> 运算符进行比较。

正数表示”右值”大于”左值”,负数表示”左值”大于”右值”,0 表示两个值相等。

const users = [
{ id: 1, firstName: "Alice", lastName: "Smith" },
{ id: 3, firstName: "Charlie", lastName: "Brown" },
{ id: 2, firstName: "Drew", lastName: "Johnson" },
];
const compareByFullName = _.castComparator(
(user) => `${user.firstName} ${user.lastName}`,
(a, b) => b.localeCompare(a)
);
users.sort(compareByFullName);
// [Alice, Charlie, Drew]