Javascript Ramda reduce字符串替换上一个字符串

Javascript Ramda reduce字符串替换上一个字符串,javascript,ramda.js,Javascript,Ramda.js,我有一个字符串列表,我想使用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 bla

我有一个字符串列表,我想使用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'

您可以在

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

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'

您可以在

上看到这一点,最终结果不是
“红-蓝-黑”
?您能解释一下您希望在每个步骤中看到什么吗?我无法理解您是如何从输入到建议输出的。当然,我们已经在上面进行了更新。因此,在步骤
n
,您正在替换索引
n-1
中的值?字符串的其他部分是什么并不重要?你说的是与“上一个”字符串的区别,但你似乎意味着与原始字符串的区别(以某种形式)。是这样吗?最终的结果不是“红蓝黑”?你能解释一下你希望在每一步看到什么吗?我无法理解您是如何从输入到建议输出的。当然,我们已经在上面进行了更新。因此,在步骤
n
,您正在替换索引
n-1
中的值?字符串的其他部分是什么并不重要?你说的是与“上一个”字符串的区别,但你似乎意味着与原始字符串的区别(以某种形式)。是吗?这很好用,谢谢!Reduce从一开始就肯定是错误的。这非常有效,谢谢!从一开始,Reduce肯定是错误的。