如何在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
相关产品推荐
相关产品推荐

