【问题标题】:How to see if an array has a value, and return true if it does. - JavaScript [duplicate]如何查看数组是否有值,如果有则返回 true。 - JavaScript [重复]
【发布时间】:2019-10-17 19:41:05
【问题描述】:

两个数组都包含字符串“hello”,但只有第一个记录为真。为什么?

function containsHello(array){
  for(let i = 0; i < array.length; i++){
    if(array[i] === 'hello'){
      return true;
    } else {
      return false;
    }
  }
}

console.log(containsHello(['hello', 'no', 'yes'])); // logs true
console.log(containsHello(['no', 'hello', 'yes'])); // logs false

【问题讨论】:

  • 在循环中添加console.log。打印多少次?您希望它打印多少次?
  • 试试 == 而不是 ===,看看会发生什么。

标签: javascript arrays


【解决方案1】:

在您返回 false 的代码中,您返回得太快(在检查所有元素之前)

你应该在循环结束后返回 false

function containsHello(array){
  for(let i = 0; i < array.length; i++){
    if(array[i] === 'hello'){
      return true;
    }
  }
  return false;
}

【讨论】:

    【解决方案2】:

    基本上,如果元素不是'hello',它会立即返回false,但没有机会检查任何潜在的前面元素。请记住,如果函数到达 return 语句,它(过早地)结束。只是一个小逻辑错误。

    还有……

    includes 是一种方法。我什至不需要解释。

    var someList = ['a', 'b', 'c'];
    console.log(someList.includes('c')) // --> true
    

    【讨论】:

    • 在发布此内容之前我不知道如何使用 .includes(),所以感谢您的解释。
    【解决方案3】:

    那是因为第二个 hello 位于索引位置 1。 在遍历数组时,它首先看到 'no' 值并返回。

    【讨论】:

      【解决方案4】:

      您的代码的问题在于它总是会返回第一项,而从不检查其他值。删除else 块,循环后返回false

      或者,只需使用array.includes()

      【讨论】:

        【解决方案5】:

        如果第一个元素不等于“hello”,则返回 false
        试试这个功能

        function containsHello(array){
          for(let i = 0; i < array.length; i++){
            if(array[i] === 'hello'){
              return true;
            }
          }
          return false
        }
        

        【讨论】:

          【解决方案6】:

          您的函数存在逻辑错误。如果第一个元素不是 'hello',则返回 false。但是,这没有任何意义,因为 'hello' 仍可能包含在其他值中。这可以通过仅在检查所有值后返回 false 来解决。

          function containsHello(array){
            for(let i = 0; i < array.length; i++){
              if(array[i] === 'hello'){
                return true;
              }
            }
            return false;
          }
          
          console.log(containsHello(['hello', 'no', 'yes']));
          console.log(containsHello(['no', 'hello', 'yes']));
          console.log(containsHello(['no','yes','also no']));

          【讨论】:

            【解决方案7】:

            这样会更好:

            function containsHello(array){
              return array.indexOf('hello') !== -1; 
            }
            

            【讨论】:

            • Array.includes 存在时,对可能不存在的元素的索引检查很糟糕。
            【解决方案8】:

            如果您想跳过 for 循环,可以使用 .includes()

            function containsHello(array){
              if(array.includes("Hello")) {
                 return true;
              } else {
                return false;
              }
            }
            

            如果您想搜索不同的单词,您可以执行以下操作

            function containsWord(word, array){
                  if(array.includes(word)) {
                     return true;
                  } else {
                    return false;
                  }
                }
            

            【讨论】:

            • 那时,它只是includes 的包装器。
            • 我同意,我只是在一个函数中给他,因为他最初的帖子有一个函数。否则为 console.log(array.contains('x'));工作得很好。啊,我看到你也用 .includes 发布了一个解决方案。
            • 我也喜欢这个解释,其他人也提到了 .includes() 但我只是想把它看作一个函数。
            【解决方案9】:

            您可以像这样使用 .includes() 函数:

            [].includes('value')
            

            然后:

            console.log(['no','hello','yes'].includes('hello')); //logs true
            console.log(['hello','no','yes'].includes('hello')); //logs true
            

            【讨论】:

            • 你并没有真正解释最初的问题,这很重要。
            • 我知道,我只是试图回答最初的问题“如何查看数组是否有值并在它执行 javascript 时返回 true”。下次我会考虑的,谢谢你的评论。
            猜你喜欢
            • 2019-06-29
            • 2013-07-21
            • 1970-01-01
            • 2018-01-04
            • 1970-01-01
            • 2016-02-17
            • 1970-01-01
            • 2022-01-17
            • 1970-01-01
            相关资源
            最近更新 更多