如何通过 id 返回值而不是 ramda 中的索引?

问题描述 投票:0回答:2

所以我有一个包含工作日的对象数组,它看起来像这样:

const weekDays = [
      {
        id: 1,
        name: 'monday'
      },
      {
        id: 2,
        name: 'tuesday'
      },
      {
        id: 3,
        name: 'wednesday'
      },
      {
        id: 4,
        name: 'thursday'
      },
      {
        id: 5,
        name: 'friday'
      },
      {
        id: 6,
        name: 'saturday'
      },
      {
        id: 7,
        name: 'sunday'
      }
    ]

我有一个格式化日期的函数,它用于在选择组件中显示日期,它看起来像这样:

export const formatDay = flip(nth)(['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'])

所以这个函数应该通过它的id返回一天的名称,例如,如果我们传递1,它应该返回星期一等,尽管目前它通过索引返回天,所以如果我们传递1,它返回星期二,尽管flip应该已经处理有这个问题

javascript ramda.js
2个回答
1
投票
代码中的

flip
函数未正确处理数组的从零开始的索引。
nth
函数需要一个从零开始的索引,但您传递的是从
1
开始的 id。您需要通过从输入值中减去 1 来调整第 n 个函数的输入。

 export const formatDay = (id) => {
      const days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
      return nth(subtract(id, 1))(days);
    };

const weekDays = [
  {id: 1,name: 'monday'},
  {id: 2,name: 'tuesday'},
  {id: 3,name: 'wednesday'},
  {id: 4,name: 'thursday'},
  {id: 5,name: 'friday'},
  {id: 6,name: 'saturday'},
  {id: 7,name: 'sunday'},
];
const formatDay = (id) => {
  const days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
  return R.nth(R.subtract(id, 1), days);
};

console.log(formatDay(1)); // Output: "monday"
console.log(formatDay(2)); // Output: "tuesday"
console.log(formatDay(3)); // Output: "wednesday"
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/ramda.min.js"></script>


0
投票

const { flip, nth } = R

const weekDays = [
  { id: 1, name: 'monday' },
  { id: 2, name: 'tuesday' },
  { id: 3, name: 'wednesday' },
  { id: 4, name: 'thursday' },
  { id: 5, name: 'friday' },
  { id: 6, name: 'saturday' },
  { id: 7, name: 'sunday' }
];

const formatDay = (id) =>
  nth(id - 1, weekDays.map(day => day.name));

console.log(formatDay(1));
console.log(formatDay(2));
<script src="https:////cdn.jsdelivr.net/npm/ramda@latest/dist/ramda.min.js"></script>

© www.soinside.com 2019 - 2024. All rights reserved.