Javascript 如何使用reduce和ramda“;hex2color";函数来计算十六进制值的列表,而不是在其颜色名称中包含r?

Javascript 如何使用reduce和ramda“;hex2color";函数来计算十六进制值的列表,而不是在其颜色名称中包含r?,javascript,filter,reduce,ramda.js,compose,Javascript,Filter,Reduce,Ramda.js,Compose,“使用reduce和hex2color函数对十六进制值列表进行计数,使其名称中没有r” 我目前的尝试如下。我知道的第一个需要修正的是过滤函数。我需要能够过滤掉任何带有字母“r”的颜色,但似乎无法找到一种方法轻松地将其融入过滤功能。这很容易成为一个语法问题,因为我想我正在要求过滤器查找==“r”的任何字符串,尽管我试图使用“contains”来解决这个问题,并让它检查整个颜色词 一旦filter函数开始工作,我假设下一步就是简单地使用reduce函数,然后将它们组合在一起。(不过,我可能离得太远了

“使用reduce和hex2color函数对十六进制值列表进行计数,使其名称中没有r”

我目前的尝试如下。我知道的第一个需要修正的是过滤函数。我需要能够过滤掉任何带有字母“r”的颜色,但似乎无法找到一种方法轻松地将其融入过滤功能。这很容易成为一个语法问题,因为我想我正在要求过滤器查找==“r”的任何字符串,尽管我试图使用“contains”来解决这个问题,并让它检查整个颜色词

一旦filter函数开始工作,我假设下一步就是简单地使用reduce函数,然后将它们组合在一起。(不过,我可能离得太远了)

我对编程很陌生,任何见解都是非常受欢迎的。谢谢

const exercise3 = _ => {
    const hexes = ["#0000ff", "#f5f5dc", "#cd853f", "#663399", "#ffa500"];
    const letter = "r";
    const mapper = hex2color;
    console.log(map(mapper, hexes)); //blue,beige,peru,rebeccapurple,orange
    const filterer = el => contains(hex2color(el), letter);
    console.log(filter(filterer, hexes)); //yields nothing, I assume to using the filter wrong with "r".
    const reducer = (acc, el) => acc + 1;
    const mappedFn = map(mapper);
    const filtererFn = filter(filterer);
    const reducerFn = reduce(reducer, 0);
    const composedFn = compose(reducerFn, filtererFn, mappedFn);
    return composedFn(hexes);
  };

看起来你需要使用contains(针,干草堆),但你目前正在使用contains(干草堆,针),看起来你走对了方向,James的提示应该会帮助你。我想指出的是,
hex2color
与Ramda无关。此外,虽然它应该可以工作,但这是
reduce
的一个奇怪用法。但是,使用
reduce
解决此问题的任何方法都有点奇怪。我猜它的意思是像
hexes.reduce((acc,hex)=>acc+(contains('r')(hex2color(hex))?1:0),0)
但我更喜欢你的方法,一旦它被清理干净。更好的方法是跳过
reduce
,只使用
length