如何用Lodash实现无论排序方向如何始终将Null值移至列表末尾
解决Lodash排序时始终将Null值移至列表末尾的问题
你当前的代码中,当data.imdb为null时返回0,升序排序时null项会排在最前面,没法满足“无论升降序都把null放末尾”的需求。可以通过多条件排序来实现目标效果,以下是修正后的代码:
调整接口定义(可选但更贴合实际场景)
export interface TVProgram { id: number; title: string; imdb: Rating | null; // 明确imdb可能为null } export interface Rating { rating: string; }
修正后的排序函数
import _ from "lodash"; import { TVProgram } from "../models/models"; export const sortProgramsByOrder = ( programs: TVProgram[], order: boolean | "asc" | "desc" ) => { // 双条件排序:先固定null项位置,再按指定规则排序有效项 return _.orderBy( programs, [ // 非null项标记为0,null项标记为1,升序时0在前、1在后 (data) => data.imdb === null ? 1 : 0, // 针对非null项,取rating的数值用于排序 (data) => data.imdb ? Number(data.imdb.rating) : 0 ], ["asc", order] // 第一个条件固定升序保证null在末尾,第二个用传入的排序方向 ); };
逻辑说明
- 第一个排序条件优先级最高:通过标记值区分null和非null项,固定null项始终排在所有有效项之后。
- 第二个排序条件处理有效项:按照
imdb.rating的数值,使用传入的order参数执行升降序排序。 - Lodash的
orderBy原生支持布尔类型的order参数(true对应升序,false对应降序),无需额外转换。
内容的提问来源于stack exchange,提问作者guziczek300
相关产品推荐
相关产品推荐

