在没有regExp

时间:2017-11-03 17:36:50

标签: javascript


我的问题可能有点不清楚。之前也提出了同样的问题,但我无法通过阅读来弄清楚如何解决我的问题。我需要更明确的指导:

我已经创建了三个功能来检查颜色。 (我不会对它们有任何问题。由于尺寸的原因,我不在这里。) 让我们假设我们有三个这样的工作函数:

function checkHex(input) {
  // returns boolean value if input is hex color
}
checkHex("#1234a6"); // returns true

function checkRGB(input) {
  // returns boolean value if input is RGB color
}
checkRGB("rgb(255, 255, 112)"); // returns true

function checkHSL(input) {
  // returns boolean value if input is hsl color
}
checkHSL("hsl(122, 1, 1)"); // returns true

我有第四个功能(checkColor),它有混合颜色值来检查:

function checkColor(input) {
    // returns boolean value if input belong to right color value 
}

checkColor("#ccccff"); // should return true
checkColor("rgb(255,255,200)"); // should return true
checkColor("hls(46,0.66,0.21)"); // should return true

问题:我是否必须将所有三个函数(checkHex,checkRGB,checkHSL)包含在第4个函数(checkColor)中?我怎么做。我对此进行了研究并尝试了几种方法来解决,但我无法解决  我试图不使用RegExp。我是编程新手,以前从未合并过多个函数。
您可以与我分享关于"组合多个功能的任何其他资源"也会帮助我很多。

感谢您提前花时间和精力!

2 个答案:

答案 0 :(得分:0)

您构建的前3个函数通常称为谓词。有许多很好的方法可以对谓词进行分组,但@FelixKling在评论中提到了最简单的方法。您还可以专门为此目的创建函数。

// composition function
const any = (...predicates) => subject => predicates.reduce((state, predicate) => (state || predicate(subject)), false);

// predicates
const biggerThan5 = x => x>5;
const isOdd = x => !!(x % 2);

// results and usage
console.log(any(biggerThan5, isOdd)(10)); // true
console.log(any(biggerThan5, isOdd)(2)); // false

答案 1 :(得分:0)

你不应该将函数包含在其他函数中,你可以在其他函数中使用它们。 例如:

function checkColor(input) {
    var isHex = checkHex(input), //store the result of function
        isRGB = checkRGB(input), //store the result of function
        isHLS = checkHSL(input); //store the result of function
    return isHex || isRGB || isHLS; //returns true if one of the options is true.
}

function checkHex(input) {
  // returns boolean value if input is hex color
}
function checkRGB(input) {
  // returns boolean value if input is RGB color
}
function checkHSL(input) {
  // returns boolean value if input is hsl color
}