函数compress()
将接受一个句子并返回一个字符串,其中删除了所有空格和标点符号。
此功能必须拨打isWhiteSpace()
和isPunct()
。
我已经完成了调用的功能,但我不知道我的js代码中缺少什么来让它调用函数。
function compress(sent) {
var punc = "; : . , ? ! - '' "" () {}";
var space = " ";
if (punc.test(param)) {
return true
} else {
return false
}
if (space.test(param)) {
return true
} else {
return false
}
isWhiteSpace(x);
isPunct(x);
}
答案 0 :(得分:4)
此函数必须调用isWhiteSpace()和isPunct()。
所以你已经有两个函数,当传递的字符是空格或标点符号时,我假设它返回true
。然后,您不需要也不应该通过在代码中为空格和标点符号实现重复的基于正则表达式的文本来复制此功能。保持干燥 - 不要重复自己。
基于这两个函数的compress
函数如下所示:
function isWhiteSpace(char) {
return " \t\n".includes(char);
}
function isPunct(char) {
return ";:.,?!-'\"(){}".includes(char);
}
function compress(string) {
return string
.split("")
.filter(char => !isWhiteSpace(char) && !isPunct(char))
.join("");
}
console.log(compress("Hi! How are you?"));

我同意正则表达式测试可能是现实世界中的正常选择:
function compress(string) {
return string.match(/\w/g).join("");
}
但是,您明确要求提供一个调用isWhiteSpace
和isPunct
。
答案 1 :(得分:1)
您可以利用String.indexOf
设计isPunct
功能。
function isPunct(x) {
// list of punctuation from the original question above
var punc = ";:.,?!-'\"(){}";
// if `x` is not found in `punc` this `x` is not punctuation
if(punc.indexOf(x) === -1) {
return false;
} else {
return true;
}
}
解决isWhiteSpace
更容易。
function isWhiteSpace(x) {
if(x === ' ') {
return true;
} else {
return false;
}
}
您可以将所有内容与一个使用String.charAt
检查字符串中每个字符的循环放在一起:
function compress(sent) {
// a temp string
var compressed = '';
// check every character in the `sent` string
for(var i = 0; i < sent.length; i++) {
var letter = sent.charAt(i);
// add non punctuation and whitespace characters to `compressed` string
if(isPunct(letter) === false && isWhiteSpace(letter) === false) {
compressed += letter;
}
}
// return the temp string which has no punctuation or whitespace
return compressed;
}
答案 2 :(得分:0)
如果在函数中返回某些内容,执行将停止。
从我所看到的,你的功能不需要返回任何东西......所以你应该这样做
function compress(sent) {
var punc = ";:.,?!-'\"(){} ";
var array = punc.split("");
for (x = 0; x < array.length; x++) {
sent = sent.replace(array[x], "");
}
isWhiteSpace(x);
isPunct(x);
return sent;
}