如何使用数组作为组合函数参数?

问题描述 投票:0回答:1

我在使用数组作为参数构建组合函数时遇到问题。 出现这个错误

类型错误:arr.map 不是函数

const testArray = ["CusTom", "Web", "aNd", "MoBile", "PlaTfoRms"];

const compose =
  (...fncs) =>
  (val) =>
    fncs.reduceRight((acc, fnc) => fnc(acc), val);

const modifyArray = (ModifyCondition) => (data) => ModifyCondition(data);

let capitalizeAllFirst = modifyArray(
  compose(
    (arr) =>
      arr.map(
        (str) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()
      ),
    (arr) => arr.join("-")
  )
);

let allToLower; // use compose + modifyArray here

console.log(capitalizeAllFirst(testArray));

我尝试在撰写中使用一个参数,效果很好

let capitalizeAllFirst = modifyArray(
  compose(
    (arr) =>
      arr.map(
        (str) => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()
      )
  )
);
javascript function-composition
1个回答
1
投票

您的代码很完美,只是您使用了

reduceRight
而不是
reduce
。这意味着您已将数组连接到字符串中,然后尝试将其视为数组以将其大写。

const testArray = ["CusTom", "Web", "aNd", "MoBile", "PlaTfoRms"];

const compose = (...fncs) =>
  val => fncs.reduce((acc, fnc) => fnc(acc), val);

const modifyArray = modifyCondition => data => modifyCondition(data);

let capitalizeAllFirst = modifyArray(compose(
  arr => arr.map(
    str => str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()
  ),
  arr => arr.join("-")
));

console.log(capitalizeAllFirst(testArray));

© www.soinside.com 2019 - 2024. All rights reserved.