最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Javascript function returns true when it should return false - Stack Overflow

programmeradmin1浏览0评论

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.

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.

Share Improve this question asked Sep 27, 2018 at 2:59 Joshua BlevinsJoshua Blevins 6971 gold badge11 silver badges28 bronze badges 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. – Aagam Jain Commented Sep 27, 2018 at 3:06
  • 1 Possible duplicate of Short circuit Array.forEach like calling break – NullPointer 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. – Joshua Blevins Commented Sep 27, 2018 at 3:07
Add a ment  | 

2 Answers 2

Reset to default 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));
}

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;
}
发布评论

评论列表(0)

  1. 暂无评论