Javascript/Ramda: 如何使下面的代码起作用
Javascript/Ramda: How to make the following code functional
您好,我有以下对象结构,
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
})
哪个returns
[{"name":"justin davidson","uid":"NFr9F4WbBxR4H5ajolbS6q0skPF2"},
{"name":"sawyer davidson","uid":"asas9F4WbBxR4H5ajolbS6q0sasF2"}]
..但是我想以纯功能的方式实现相同的目的。这里最好的方法是什么?我猜是 compose and map
,但我似乎无法计算出来。找个小方向。
谢谢
只需使用 map
而不是 forEach
:
const x = R.keys(usersList).map((uid) => usersList[uid])
看起来还有一个 values
方法可以满足您的需求:
const x = R.values(usersList)
某些库中并不总是有一个函数可以完全按照您的要求执行。展示如何自己做事表明,当您遇到问题并且找不到神奇的功能来为您解决问题时,您不必感到 "stuck"。一旦您了解了该功能的存在,当然,请继续并用内置的功能替换您的自制解决方案。但在那之前,不要害怕编写代码并继续前进。
// 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 库中,但下次不要害怕尝试自己解决它。脑洞大开,赶紧用起来吧^_^
您好,我有以下对象结构,
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
})
哪个returns
[{"name":"justin davidson","uid":"NFr9F4WbBxR4H5ajolbS6q0skPF2"},
{"name":"sawyer davidson","uid":"asas9F4WbBxR4H5ajolbS6q0sasF2"}]
..但是我想以纯功能的方式实现相同的目的。这里最好的方法是什么?我猜是 compose and map
,但我似乎无法计算出来。找个小方向。
谢谢
只需使用 map
而不是 forEach
:
const x = R.keys(usersList).map((uid) => usersList[uid])
看起来还有一个 values
方法可以满足您的需求:
const x = R.values(usersList)
某些库中并不总是有一个函数可以完全按照您的要求执行。展示如何自己做事表明,当您遇到问题并且找不到神奇的功能来为您解决问题时,您不必感到 "stuck"。一旦您了解了该功能的存在,当然,请继续并用内置的功能替换您的自制解决方案。但在那之前,不要害怕编写代码并继续前进。
// 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 库中,但下次不要害怕尝试自己解决它。脑洞大开,赶紧用起来吧^_^