【问题标题】:How to check if array contains boolean in javascript?如何检查数组是否包含javascript中的布尔值?
【发布时间】:2018-02-18 19:03:06
【问题描述】:
// Create a function named 'containsBool'that accepts an 

// array as a parameter.

// You can remove the comments and use the following array: 

// myArray = ['Wednesday',23,false];

// Create a for / in loop inside the function that iterates 

// through the items in the array.

// In the loop, check each array item for 'typeof' data.

// If the array contains Boolean data, return true.

// Likewise, if the array does not contain Boolean data, return false.

// Call the function and log the returned Boolean to the console.

这是我的代码,不知道哪里不行:

var myArray = ['Wednesday', 23, true];
function containsBool(checkBool) {
  for (g in checkBool) {
    if (typeof checkBool[g] === 'boolean') {
      return true;
    } else {
      return false;
    }
  }
}

console.log(containsBool(myArray));

【问题讨论】:

  • for...in 不会遍历数组。使用for...of
  • 当你遇到第一个(任何)非布尔值时,你不能return false,当你在整个数组中没有遇到时,你必须这样做 - 在循环之后。
  • @Bergi // 在函数内部创建一个 for / in 循环,该循环 // 遍历数组中的项目。 任务明确要求他使用for...in
  • @connexo 哦,好吧,我没读过,但它仍然是错误的。明确要求这一点的作业只能被视为对课程质量的一种指示……

标签: javascript arrays function


【解决方案1】:

如果问题陈述不是太特定于实现(for循环或其他......),那么它做同样的工作:

['Wednesday', 23, true].some((x)=> typeof x === 'boolean')

【讨论】:

  • var myArray2 = ['Wednesday', 23, false];函数 checkBoolean2(boolCheck) { if(boolCheck.some((x)=> typeof x === 'boolean')){ return true; } 否则 { 返回假; } } console.log(checkBoolean2(myArray2));
【解决方案2】:

您需要注意 return 结束了 for...in 循环。如果你找到一个布尔值,可以提前结束它。如果循环永远找不到布尔值,它会到达return false

请注意,要遍历数组,您需要使用for...of,而不是for...in

const myArray = ['Wednesday', 23, true];
function containsBool(checkBool) {
  for (arrayEntry of checkBool) {
    if (typeof arrayEntry === 'boolean') {
      return true;
    } 
  }
  return false;
}

console.log(containsBool(myArray));

对于更现代的 ES6 版本,您可以使用Array.prototype.some

const myArray = ['Wednesday', 23, true];

console.log(myArray.some(entry => typeof entry === 'boolean'));

【讨论】:

  • 人-1ing,请解释一下。这正是作业要求 OP 做的事情。
  • 非常感谢!您的代码确实帮助我解决了这个问题。我想知道为什么当“for”循环之外的“return false”时它会起作用?
  • 然后我看到“当你遇到第一个(任何)非布尔值时,你不能返回 false,当你在整个数组中没有遇到时,你必须这样做 - 在循环之后。-贝尔吉“
  • @Bergi 我认为您可能会因为在数组上使用 for...in 对 OP 缺乏纠正而投了反对票。我改变了。
【解决方案3】:

这应该可以完成工作:

var someArray = ['Wednesday', 23, true];
function checkBoolean() {

    for (i = 0; i < someArray.length; i++) {
        if (typeof someArray[i] === "boolean") {
            return true;
        }
    }
}

console.log(checkBoolean(someArray));

在您的情况下,不应使用for...in 循环来循环数组。 (阅读this为什么。) 您还应该查看您的else 声明。如果要检查的条目不是布尔值(发生两次),该函数将返回 false。 return 停止执行函数,因此循环只执行一次。

【讨论】:

  • 感谢您给我一个链接,为什么不使用'for...in'循环。
猜你喜欢
  • 2021-09-10
  • 1970-01-01
相关资源
最近更新 更多