2

I have a function that checks if a param exists in an array of inputs. It should return false but does not.

{
  ...
  validation: params => {
    const valid = ["valid", "inputs"];
    valid.forEach( v=> {
      if (!params.hasOwnProperty(v)) {
        return false;
      }
    });

    return true;
  }

So even when the if statement does evaluate to be true it never return false. This function always returns true no matter what.

3
  • Because the return false stmt is of you callback's return stmt.try setting a boolean in callback and return on basic of that or use for loop instead. Commented Sep 27, 2018 at 3:06
  • 1
    Possible duplicate of Short circuit Array.forEach like calling break Commented Sep 27, 2018 at 3:06
  • If someone can post how I could refactor this code to work the way I intend I can accept that as the answer. Commented Sep 27, 2018 at 3:07

2 Answers 2

7

As an alternative, use the right tool for the job. If you want to check whether every member of an array has a certain property, use every:

validation: params => {
  const valid = ["valid", "inputs"];
  return valid.every(v => params.hasOwnProperty(v));
}
Sign up to request clarification or add additional context in comments.

1 Comment

Yeah, that's really a better idea.
4

You're return is returning from the callback function of forEach not the main function. You can't return early from a forEach without something like a throw. If you want to return early use a for...of loop instead:

validation: params => {
    const valid = ["valid", "inputs"];
    for (v of valid) {
      if (!params.hasOwnProperty(v)) {
      return false;  // this returns from the main function
    }
  };

  return true;
}

1 Comment

Worked like a charm. Callbacks are a pain in the arse.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.