![](/img/trans.png)
[英]How can I make this code more 'functional programming' style in Ramda.js / lodash
[英]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
})
哪個返回
[{"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)
在某個lib中並不總是藏有一個函數,它完全可以實現您想要的功能。 展示如何自己做事表明您在遇到問題時不必感到“卡住”,也找不到為您解決問題的神奇功能。 一旦您知道該功能存在,請確定,繼續並用內置的替代您的自制解決方案。 但是在那之前,不要害怕編寫代碼並繼續前進。
// 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庫中,但是下次不要害怕嘗試自行解決它。 您的大腦功能強大,現在就使用它吧^ _ ^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.