2016-11-15 22 views
1

您好我有以下對象結構,的JavaScript/Ramda:如何使下面的代碼功能

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"}] 

..however我想達到同樣的純功能的方式。這裏最好的方法是什麼?我猜compose and map,但我似乎無法解決。尋找一個小方向。

感謝

回答

5

只需使用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庫,但下次不要害怕嘗試解決它自己。你有一個強大的大腦,現在使用它^ _^

+1

感謝@naomik花時間重新寫這個,我同意你說的一切。在深入學習圖書館和輔助功能之前,最好學習和理解如何在Vanilla JavaScript中編寫函數。感謝提示,這正是我要做的。 – RuNpiXelruN

+0

@RuNpiXelruN高興地幫助^ _^ – naomik

+2

更美味的答案,@naomik!非常好的重寫。 –