【问题标题】:How to normalize Api response using Ramda如何使用 Ramda 标准化 Api 响应
【发布时间】:2021-08-11 11:48:36
【问题描述】:

如何使用 ramda 规范化这个 api 响应:

appointmentsConfig: Object
   isEnable: true
   isReadonly: false
   reminderInAdvanceMinutes: 1440
   __proto__: Object
tasksConfigs: Array(4)
   0: Object
      isEnable: true
      isReadonly: false
      reminderInAdvanceMinutes: 15
      reminderRepeatIntervalMinutes: 10
      remindersNumber: 0
      shouldRepeatUntilTaskDone: true
      taskTypeGroupAlias: "Medications"
      taskTypes: Array(1)
      __proto__: Object
   1: Object
      isEnable: true
      isReadonly: false
      reminderInAdvanceMinutes: 15
      reminderRepeatIntervalMinutes: 10
      remindersNumber: 0
      shouldRepeatUntilTaskDone: true
      taskTypeGroupAlias: "Measurements"
      taskTypes: Array(2)
      __proto__: Object
...etc.

到这个对象:

    {
  "Medications": {
    "taskTypeGroupAlias": "Medications",
    "taskTypes": [
      "MedicationTask"
    ],
    "isReadonly": false,
    "isEnable": true,
    "shouldRepeatUntilTaskDone": true,
    "remindersNumber": 0,
    "reminderRepeatIntervalMinutes": 10,
    "reminderInAdvanceMinutes": 15
  }, 

...以及相同的 Measurements、Surveys、Tasks 对象

...下面还有一个不同的对象

  "Visits": {
    "isReadonly": false,
    "isEnable": true,
    "reminderInAdvanceMinutes": 1440
  }
}

访问 - 它是一个对象约会配置。

我想我必须使用 reduceBy 方法,但我无法解决此任务。

【问题讨论】:

    标签: javascript reactjs react-native redux ramda.js


    【解决方案1】:

    如果tasksConfigs 对每个taskTypeGroupAlias 类型都有一个项目,则可以使用 R.indexBy:

    R.indexBy(R.prop('taskTypeGroupAlias'), response.tasksConfigs);
    

    但是,如果每个taskTypeGroupAlias 可能出现多次,您应该考虑 R.groupBy:

    R.groupBy(R.prop('taskTypeGroupAlias'), response.tasksConfigs);
    

    这将返回一个数组对象,其中每个数组包含具有相同taskTypeGroupAlias 的对象:

    {
      Medications: [],
      Measurements: [],
      Surveys: [],
      Tasks: [],
      Visits: [],
    }
    

    【讨论】:

    • 每个taskTypeGroupAlias 类型只有一项。你能帮我参观一下吗?我没有很好地定义整个情况,这很糟糕。我还需要规范化appointmentsConfig: Object isEnable: true isReadonly: false reminderInAdvanceMinutes: 1440 __proto__: Object。访问。我该怎么做?
    • 而不是从控制台粘贴。创建一个实际输入数据(不大)和预期结果的示例。
    • 我怎样才能将 { 药物:[],测量:[],调查:[],任务:[],访问:[],} 转为任务配置:Array(4) 0: Object isEnable : true isReadonly: false提醒InAdvanceMinutes: 15提醒RepeatIntervalMinutes: 10提醒编号: 0 shouldRepeatUntilTask​​Done: true taskTypeGroupAlias: "Medications" taskTypes: Array(1) proto: Object ...等
    • 我需要返回旧对象用于发布请求(正文)
    猜你喜欢
    • 2020-01-09
    • 2015-07-11
    • 2012-12-15
    • 2020-03-06
    • 1970-01-01
    • 2019-11-12
    • 2015-07-29
    • 2017-11-11
    • 2019-04-27
    相关资源
    最近更新 更多