簡體   English   中英

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

哪個返回

[{"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM