簡體   English   中英

Ramda JS:如何執行一個地圖,我在每個對象上為R.replace調用給定屬性?

[英]Ramda JS: How to perform a map where I call R.replace for a given property on each object?

鑒於以下數據:

const my_data = [
  {
    name: "John",
    age: 22
  },
  {
    name: "Johnny",
    age: 15
  },
  {
    name: "Dave",
    age: 27
  }
]

我想轉換數據,以便在每個名稱屬性中將子字符串“John”替換為“Ben”,所以它看起來像這樣:

[
  {
    name: "Ben",
    age: 22
  },
  {
    name: "Benny",
    age: 15
  },
  {
    name: "Dave",
    age: 27
  }
]

我想以正確的功能方式這樣做(我認為沒有點,但我還在學習),所以我可以在管道中重復使用它,比如首先按年齡減少然后進行替換,或者首先進行替換做一個。 我如何使用Ramda函數執行此操作?

var fix_names = ???
var fixed_data = R.map( fix_names, my_data );
R.map(R.over(R.lensProp('name'), R.replace('John', 'Ben')))(my_data)

R.overR.lensProp

沒有理由更喜歡無點功能。 可讀性才是真正重要的:

 var myData = [ new Person("John", 22) , new Person("Johnny", 15) , new Person("Dave", 27) ]; var fixedData = myData.map(fixName); alert(JSON.stringify(fixedData, null, 4)); function fixName(person) { return Object.assign(new Person, person, { name: person.name.replace(/John/g, "Ben") }); } function Person(name, age) { this.name = name; this.age = age; } 

無點函數在非常有限的情況下非常有用,例如eta轉換函數組合 無點函數不應被視為函數式編程的基石。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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