You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:35:29