Ramda 减少字符串以替换前一个

Ramda reduce string to replace previous one

我有这个字符串列表,我想使用 ramda 减少它们:

["red blue green", "pink blue green", "red orange green", "red blue black"]

我想减少列表以便我剩下:

"pink orange black"

所以基本上只是替换与前一个字符串的差异,而不是覆盖整个字符串。

步骤应该是:

"red blue green"
"pink blue green"
"pink orange green"
"pink orange black"

这是我目前拥有的:

const strings = ["red blue green", "pink blue green", "red orange green", "red blue black"]

const replaceString = (old, acc) => R.replace(old, acc, acc)

R.reduce(replaceString, R.head(strings))

我有代码可以从初始数据中得到你想要的答案。但我真的不知道它是否解决了你的一般问题:

const colors = ["red blue green", "pink blue green", "red orange green", "red blue black"];

const fn = pipe(
  map(split(' ')),    // [['red', 'blue', 'green'], ['pink', 'blue' 'green'], 
                      //   ['red', 'orange', 'green'], ['red' 'bluee', 'black']]
  flatten,            // ['red', 'blue', 'green', 'pink', 'blue' 'green', 
                      //   'red', 'orange', 'green', 'red' 'bluee', 'black']
  countBy(identity),  // {red: 3, blue: 3, green: 3, pink: 1, orange: 1, black: 1}
  filter(equals(1)),  // {pink: 1, orange: 1, black: 1}
  keys,               //  ['pink', 'orange', 'black'
  join(' ')           //  'pink orange black'
)

fn(colors); //=> 'pink orange black'

您可以在 Ramda REPL.

上看到实际效果