【问题标题】:Javascript/Ramda: How to make the following code functionalJavascript/Ramda:如何使以下代码起作用
【发布时间】:2017-03-30 00:28:16
【问题描述】:

您好,我有以下对象结构,

const usersList = {
  NFr9F4WbBxR4H5ajolbS6q0skPF2: {
    name: "justin davidson",
    uid: "NFr9F4WbBxR4H5ajolbS6q0skPF2"
  },
  asas9F4WbBxR4H5ajolbS6q0sasF2: {
    name: "sawyer davidson",
    uid: "asas9F4WbBxR4H5ajolbS6q0sasF2"
  }
}

它有一个用户 ID 作为键,它是嵌套在其中的用户对象。我想存储内部用户数据。我一直在使用 Ramda JS,并通过以下方式做到了这一点,

let x = []
const y = R.keys(usersList).forEach((uid) => {  
  x.push(usersList[uid])
  return x
})

返回

[{"name":"justin davidson","uid":"NFr9F4WbBxR4H5ajolbS6q0skPF2"},    
{"name":"sawyer davidson","uid":"asas9F4WbBxR4H5ajolbS6q0sasF2"}]

..但是我想以纯粹的功能方式实现相同的目标。这里最好的方法是什么?我猜compose and map 但我似乎无法解决。寻找一点方向。

谢谢

【问题讨论】:

    标签: javascript functional-programming ecmascript-6 ramda.js


    【解决方案1】:

    只需使用map 而不是forEach

    const x = R.keys(usersList).map((uid) => usersList[uid])
    

    看起来还有一个 values 方法可以满足您的需求:

    const x = R.values(usersList)
    

    【讨论】:

      【解决方案2】:

      并不总是隐藏在某个库中的函数可以完全按照您的意愿执行。展示如何自己做事表明,当您遇到问题并且找不到神奇的功能为您解决问题时,您不必感到“卡住”。一旦你知道该功能存在,当然,继续用内置的替换你的自制解决方案。但在那之前,不要害怕编写代码并继续前进。

      // ovalues :: (Object k:v) -> [v]
      const ovalues = o =>
        Array.from(Object.keys(o), k => o[k])
      
      const usersList = {
        NFr9F4WbBxR4H5ajolbS6q0skPF2: {
          name: "justin davidson",
          uid: "NFr9F4WbBxR4H5ajolbS6q0skPF2"
        },
        asas9F4WbBxR4H5ajolbS6q0sasF2: {
          name: "sawyer davidson",
          uid: "asas9F4WbBxR4H5ajolbS6q0sasF2"
        }
      }
      
      console.log(ovalues(usersList))

      是的,R.values 确实存在于 Rambda 库中,但下次不要害怕尝试自己解决它。你有一个强大的大脑,现在使用它^_^

      【讨论】:

      • 感谢@naomik 花时间重新编写本文,我同意你所说的一切。在深入了解库和辅助函数之前,最好学习和理解如何在 Vanilla JavaScript 中编写函数。感谢您的提示,这正是我要做的。
      • @RuNpiXelruN 乐于助人^_^
      • 一个更可口的答案,@naomik!很好的重写。
      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 2019-06-05
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多