简体   繁体   English

Javascript / Ramda:如何使以下代码起作用

[英]Javascript/Ramda: How to make the following code functional

Hi I have the following object structure, 嗨,我具有以下对象结构,

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

It has a user ID as key, and it's user object nested within. 它具有用户ID作为键,并且嵌套了用户对象。 I want to store the inner user data. 我想存储内部用户数据。 I've been using Ramda JS and have done so by doing the following, 我一直在使用Ramda JS,并且通过执行以下操作来做到这一点,

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

which returns 哪个返回

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

..however I'd like achieve the same in a purely functional way. ..但是我想以一种纯粹的功能性方式实现相同的目标。 What would be the best approach here? 最好的方法是什么? I'm guessing compose and map but I can't seem to work it out. 我猜是compose and map但似乎无法解决。 Looking for a little direction. 寻找一点方向。

Thanks 谢谢

Just use map instead of forEach : 只需使用map而不是forEach

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

It looks like there's also a values method that does what you want: 看起来还有一个values方法可以满足您的需求:

const x = R.values(usersList)

There isn't always a function tucked away in some lib that does exactly what you want it to do. 在某个lib中并不总是藏有一个函数,它完全可以实现您想要的功能。 Showing how to do things on your own demonstrates that you don't have to feel "stuck" when you're faced with a problem and you can't find a magical function to solve it for you. 展示如何自己做事表明您在遇到问题时不必感到“卡住”,也找不到为您解决问题的神奇功能。 Once you learn the function exists, sure, go ahead and replace your home-brew solution with the built-in. 一旦您知道该功能存在,请确定,继续并用内置的替代您的自制解决方案。 But until then, don't be afraid to write code and move on. 但是在那之前,不要害怕编写代码并继续前进。

 // 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)) 

So yep, R.values does exist in the Rambda library, but next time don't be afraid to try to solve it on your own. 所以,是的, R.values确实存在于Rambda库中,但是下次不要害怕尝试自行解决它。 You have a powerful brain, now use it ^_^ 您的大脑功能强大,现在就使用它吧^ _ ^

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM