【问题标题】:Test for value in Javascript Array [duplicate]测试Javascript数组中的值[重复]
【发布时间】:2011-07-12 06:42:03
【问题描述】:

在 SQL Server 中,我可以说:

WHERE X IN(1,2)

你会如何用 JavaScript 重写以下代码:

if (X==1 || X==2) {}

【问题讨论】:

  • 不知道能不能写个IN函数。
  • 你的问题没有意义。您编写了有效的 JavaScript。

标签: javascript


【解决方案1】:

使用Array .includes method

if ([1, 2].includes(x)) {
  // array has x
}

【讨论】:

  • 这对于现代浏览器来说是一个更好的答案,但恐怕 IE 不支持它。参考:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 在 Stack Overflow 上添加解释为什么您的解决方案应该有效是一种很好的做法。更多信息请阅读How To Answer
  • 是的,IE 无法运行。将其与 polyfill 或与转译器结合使用(例如 Babel / Typescript)
【解决方案2】:

使用indexOf 查看x 是否在数组中。

if([1,2].indexOf(x) !== -1)

【讨论】:

【解决方案3】:

只是好玩:

if (X*X+1*2 == (1+2)*X) {}

或不言自明:

if ((X-1)*(X-2) == 0) {}

【讨论】:

    【解决方案4】:

    没有灵丹妙药。会有一些陷阱。

    如果您按照某些答案的建议执行indexOf,则需要记住并非所有浏览器都支持Array.indexOf,因此您需要提供自己的后备方案。此外,这将具有O(n) 的性能,因为它需要遍历整个数组,如果您正在处理一个巨大的数组,这可能并不理想。

    如果您按照其他答案的建议使用 in 运算符,您需要记住在 Javascript 对象的属性中始终是字符串,因此如果您正在检查数字,请不要指望 === 检查有效。

    在您建议的这个特定示例中,我会选择旧的 if (X==1 || X==2)

    【讨论】:

    • 简单和超级干净的答案,确保在所有浏览器上运行。
    【解决方案5】:
    if (x in {1:true, 2:true}) { }
    

    或者,如果你想抽象它,你可以这样做http://snook.ca/archives/javascript/testing_for_a_v

    函数 oc(a) { var o = {}; for(var i=0;i

    仍然...不是最可扩展的事情

    【讨论】:

    • 如果x 包含“继承”属性的标识符,则失败:var x = "constructor"; x in {1:true, 2:true} 产生 true。
    • 这很有趣,老实说它并不是最好的构造。
    【解决方案6】:

    将数组转换为对象字面量的函数

    function oc(a)
    {
     var o = {};
     for(var i=0;i<a.length;i++)
     {
      o[a[i]]='';
     }
      return o;
    }
    

    你可以像这样调用函数

    if( name in oc(['Tom', 'Harry','Sue']) ) { ... }
    

    【讨论】:

      【解决方案7】:

      我知道我们在 PHP 中有 in_array() 函数,但我从未听说过 JS 中有类似的函数。 我认为您必须以旧方式进行:

      函数包含(a,obj){ var i = a.length; 当我 - ) { if (a[i] === obj) { 返回真; } } 返回假; }

      【讨论】:

        【解决方案8】:

        需要 Javascript 1.6

        if ((new Array(1, 2)).indexOf(X) != -1) {
        }
        

        【讨论】:

          【解决方案9】:

          尝试使用数组,然后使用它的.indexOf()

           var myNumbers = [1,2];
           var foo = 4;
           var bar = 1;
          
           var exists = (myNumbers.indexOf(bar) > -1); //true
           var notExists = (myNumbers.indexOf(foo) > -1); //false
          

          【讨论】:

          猜你喜欢
          • 2011-02-10
          • 2013-01-07
          • 1970-01-01
          • 2017-12-20
          • 2014-10-02
          • 1970-01-01
          • 2020-08-29
          • 1970-01-01
          • 2022-01-24
          相关资源
          最近更新 更多