确定字符串是否在JavaScript中列表中

在SQL中,我们可以看到一个字符串是否在列表中,如下所示:

Column IN ('a', 'b', 'c')

在JavaScript中做这件事的好方法是什么? 这样做太笨拙了:

if (expression1 || expression2 || str === 'a' || str === 'b' || str === 'c') {
   // do something
}

我不确定这个的性能或清晰度:

if (expression1 || expression2 || {a:1, b:1, c:1}[str]) {
   // do something
}

或者可以使用开关功能:

var str = 'a',
   flag = false;

switch (str) {
   case 'a':
   case 'b':
   case 'c':
      flag = true;
   default:
}

if (expression1 || expression2 || flag) {
   // do something
}

但这是一个可怕的混乱。 有任何想法吗?

在这种情况下,我必须使用Internet Explorer,因为它适用于企业内部网页面。 所以['a', 'b', 'c'].indexOf(str) !== -1在没有语法糖的情况下将不会工作。


你可以调用indexOf

if (['a', 'b', 'c'].indexOf(str) >= 0) {
    //do something
}

EcmaScript 6

如果您使用的是ES6,则可以构建这些项目的数组,并使用includes

['a', 'b', 'c'].includes('b')

没有阵列

你可以添加一个新的isInList属性给字符串,如下所示:

if (!String.prototype.isInList) {
   String.prototype.isInList = function() {
      let value = this.valueOf();
      for (let i = 0, l = arguments.length; i < l; i += 1) {
         if (arguments[i] === value) return true;
      }
      return false;
   }
}

然后像这样使用它:

'fox'.isInList('weasel', 'fox', 'stoat') // true
'fox'.isInList('weasel', 'stoat') // false

你可以为Number.prototype做同样的事情。

indexf使用IE8和更早版本的Polyfill

除了ES6,你可以在大多数浏览器中使用indexOf做同样的事情(IE8和更早的版本不是“大多数”的一部分)。

在这种情况下,我最终使用了indexOf()函数,并为Internet Explorer 7“推出了自己的”。

if (!Array.prototype.indexOf) {
   Array.prototype.indexOf = function(item) {
      var i = this.length;
      while (i--) {
         if (this[i] === item) return i;
      }
      return -1;
   }
}

不过,从长远来看,我不认为修改Array.prototype是最好的答案。 在JavaScript中修改ObjectArray原型可能导致严重的错误。 您需要决定在自己的环境中这样做是否安全。 主要注意的是迭代一个数组(当Array.prototype添加属性时)with for ... in将返回新的函数名称作为键之一:

Array.prototype.blah = function() { console.log('blah'); };
for (var x in [1, 2, 3]) { console.log(x); }
// Result:
0
1
2
blah // Extra member iterated over

大多数答案都提出了Array.prototype.indexOf方法,唯一的问题是它不能在IE9之前的任何IE版本上工作。

作为另一种选择,我给你留下了两个可用于所有浏览器的选项:

if (/Foo|Bar|Baz/.test(str)) {
  // ...
}


if (str.match("Foo|Bar|Baz")) {
  // ...
}
链接地址: http://www.djcxy.com/p/25667.html

上一篇: Determine if string is in list in JavaScript

下一篇: Block Comments in Clojure