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

如何在Ramda中根据ID而非索引返回对应值?

问题分析与解决方案

你的问题核心是数组索引(从0开始)和工作日ID(从1开始)不匹配,flip函数只是翻转nth的参数顺序,解决不了这个偏移问题——nth本身就是按0索引取元素,所以传入ID=1时,它会取数组的第2个元素(索引1)也就是tuesday。

下面给你两种可行的解决方式:

方式一:利用现有weekDays数组(推荐)

直接通过ID匹配数组中的对象,不用硬写日期数组,后续维护更方便:

export const formatDay = (id) => weekDays.find(day => day.id === id)?.name;
  • 调用formatDay(1)会返回monday,完全符合需求
  • 用?.可选链操作符,避免传入不存在的ID时抛出错误

方式二:调整索引适配nth函数

如果你一定要用nth相关逻辑,只需要把传入的ID减1,转换成0索引即可:

// 假设你使用的是Ramda这类工具库的nth函数
export const formatDay = (id) => nth(id - 1)(['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']);

或者结合flip的写法:

export const formatDay = (id) => flip(nth)(['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'])(id - 1);

为什么原代码不行?

原代码中flip(nth)把nth(n, list)转换成了flip(nth)(list)(n),你传入1时,本质是调用nth(1, 日期数组),自然取到的是索引1的tuesday,和ID的对应关系差了1位,flip在这里起不到修正索引的作用。

内容的提问来源于stack exchange,提问作者Carl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:02:17