Kim Peoples
Kim Peoples

Reputation: 17

Remove punctuation and spaces from String

The function compress() would accept a sentence and return a string with all the blanks and punctuation removed.
This function must call isWhiteSpace() and isPunct().

I've already done the functions to call, but I don't know what's missing from my js code to make it call the functions.

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);
}

Upvotes: 1

Views: 3011

Answers (3)

ThisClark
ThisClark

Reputation: 14823

You can leverage String.indexOf to design the isPunct function.

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;
    }
}

Solving isWhiteSpace is easier.

function isWhiteSpace(x) {
    if(x === ' ') {
        return true;
    } else {
        return false;
    }
}

You can put it all together with a loop that checks every character in a string using 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;
}

Upvotes: 1

le_m
le_m

Reputation: 20228

This function must call isWhiteSpace() and isPunct().

So you already have two functions which I assume return true when the passed character is either whitespace or a punctuation mark. Then you need not and should not duplicate this functionality by implementing a duplicate regex based text for whitespace and punctuation in your code. Keep it DRY - don't repeat yourself.

A compress function based on these two functions would look as follows:

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?"));

I agree that a regex test would probably the to-go choice in a real world scenario:

function compress(string) {
  return string.match(/\w/g).join("");
}

However, you specifically asked for a solution which calls isWhiteSpace and isPunct.

Upvotes: 5

If you return something in a function, execution will stop.

From what I can see, your function doesn't need to return anything... So you should just do this

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;
}

Upvotes: 0

Related Questions