【问题标题】:Difficulty with Boolean and arrays in JavascriptJavascript中布尔值和数组的困难
【发布时间】:2019-04-09 10:47:16
【问题描述】:

在这里,我正在尝试编写一个将整数列表作为参数并搜索值 7 的代码。如果 7 在列表中,则该函数将返回一个布尔值,表示 true,否则返回 false。这是我迄今为止尝试过的:

这可能与我的 else 语句有关吗?我结束的太早了吗?还是不够快?

【问题讨论】:

  • 将您的代码发布为纯文本,而不是图像。有关代码格式化帮助,请参阅 formatting
  • 去掉else,它就可以正常工作了。该构造称为if-else,而不是for-else
  • 这不是 Python,你不能在 for 上有一个 else 子句。它只能与if 一起使用。
  • 我意识到这可能是一个编码练习,但如果你喜欢简洁,你可以做一些简单的事情,比如function find_value(list) { return list.includes(7); }

标签: javascript arrays boolean


【解决方案1】:

您对 if 语句的声明是错误的。 else 标签在错误的行上。如果你使用 else,它应该在 if-block 之后。

但将else-block 向上移动并不能修复您的函数,因为如果数组中的第一个元素是7,它只会返回true

有很多很好的方法可以做到这一点,例如使用高阶函数,但您似乎是该语言的新手。

编辑:因此,我建议以下两种简单方法之一:

1) 您可以将数组中找到的 7s 的数量存储在 for 循环中。然后返回false,如果7s为0true,如果它大于0

2) 另一种更快的方法是在遇到 7 时在 for-loop 中返回 true,在 for-loop 之后返回 return false。因为return 语句退出了作用域——这是你的函数——不仅for-loop 会结束,而且你的函数也会更早地返回true

对于第二个选项,您的函数将如下所示:

function find_value(list) {
  for (let i = 0; i < list.length; i++) {
    if(list[i] == 7) {
      return true
    }
  }
  return false
}

【讨论】:

  • 虽然这是一次学习经历,但我非常不同意您提出的解决方案。如果您有一个包含 5,000 项的数组并且第一项是 7,您的解决方案将继续评估其他 4,999 项。
  • 是的,你是对的。更快的方法是在遇到 7 时直接返回 true,但我想保持简单。
【解决方案2】:

试试这个方法

function search(list , value){      // Value = 7; 
    return true ? list.indexOf(value) > -1 : false
}

【讨论】:

  • 再次...为什么要使用三元运算符?您实际上是在说“如果truetrue...”indexOf 也区分大小写。 return list.indexOf(value) &gt; -1 可以正常工作。
  • @TylerRoper 如果列表有索引值则返回 true,否则返回 false。
  • @TylerRoper 你能告诉我,我的回答有什么问题吗。
  • 我真的只是...? indexOf 区分大小写。我仍然对三元运算符感到非常困惑,但我否决了它,因为它根本不起作用。
  • 您所附图片中的代码与您的答案中的代码不同。它是 index Of ,而不是 index of 。我也不知道如何解释三元运算符的事情。你会写if (true) { ... } else { ... }吗?因为这就是true ? ... : ... 的真正含义。
【解决方案3】:

Javascript 已经有一个功能可以做到这一点。 Array.prototype.includes()。你可以这样使用它:

const containsSeven = list.includes(7)

如果您正在寻找更复杂的东西,例如一个项目是否是一个对象并包含特定的键值对,您可以使用Array.prototype.some()

【讨论】:

  • 有什么理由使用some 并编写自己的比较而不是仅仅使用includes?真的很好奇。
  • 你是对的。包含要好得多。从数组原型列表中溜走了。谢谢。
  • 在这种情况下,我认为包含要好得多。我想我自然而然地去了 some() 因为我总是在检查更复杂的东西。再次感谢您指出这一点。
【解决方案4】:

您可以将Array.prototype.find() 的结果强制转换为boolean,它返回array 中满足提供的测试功能的第一个元素 的值。否则返回undefined

代码:

const list1 = [4, 5, 6, 7, 8];
const list2 = [1, 2, 3, 4, 5];
const findTheNumber = (arr, num) => !!arr.find(n => n === num);

console.log(findTheNumber(list1, 7));
console.log(findTheNumber(list2, 7));

【讨论】:

    【解决方案5】:

    您可以简单地使用数组并按照 ECMA2016 使用包含,如下所示:

    if([2,5,7].includes(value)) {
        return true;
    }
    return false;
    

    或与列表

    var flag = false;
    
    for(var i=0; i<arguments.length; i++)
    {   if(arguments[i] == this) { flag = true; break; }}
    
    return flag;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-11
      • 2010-11-08
      • 2021-10-08
      • 2013-10-02
      • 2014-09-23
      • 2017-06-04
      • 1970-01-01
      相关资源
      最近更新 更多