首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript:比较一个值与多个值的最好方法

Javascript:比较一个值与多个值的最好方法
EN

Stack Overflow用户
提问于 2012-02-03 07:09:32
回答 8查看 150.7K关注 0票数 84

比较一个值和多个选项的最好方法是什么?

我知道有很多方法可以做到这一点,但我在寻找最整洁的方法。

我之所以这样问,是因为我希望这是可行的(当你看着它的时候,显然不是这样的):

代码语言:javascript
运行
复制
if (foobar == (foo||bar) ) {
     //do something
}
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-02-03 07:35:36

不要试图太偷偷摸摸,特别是当它不必要地影响性能的时候。如果你真的有一大堆的比较要做,只需要很好地格式化它。

代码语言:javascript
运行
复制
if (foobar === foo ||
    foobar === bar ||
    foobar === baz ||
    foobar === pew) {
     //do something
}
票数 134
EN

Stack Overflow用户

发布于 2012-02-03 07:12:56

我用来做的是将这些多个值放入一个数组中,如下所示

代码语言:javascript
运行
复制
var options = [foo, bar];

然后,使用indexOf()

代码语言:javascript
运行
复制
if(options.indexOf(foobar) > -1){
   //do something
}

对于漂亮:

代码语言:javascript
运行
复制
if([foo, bar].indexOf(foobar) +1){
   //you can't get any more pretty than this :)
}

对于较旧的浏览器:

( https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/IndexOf )

代码语言:javascript
运行
复制
if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
        "use strict";
        if (this == null) {
            throw new TypeError();
        }
        var t = Object(this);
        var len = t.length >>> 0;
        if (len === 0) {
            return -1;
        }
        var n = 0;
        if (arguments.length > 0) {
            n = Number(arguments[1]);
            if (n != n) { // shortcut for verifying if it's NaN
                n = 0;
            } else if (n != 0 && n != Infinity && n != -Infinity) {
                n = (n > 0 || -1) * Math.floor(Math.abs(n));
            }
        }
        if (n >= len) {
            return -1;
        }
        var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
        for (; k < len; k++) {
            if (k in t && t[k] === searchElement) {
                return k;
            }
        }
        return -1;
    }
}
票数 79
EN

Stack Overflow用户

发布于 2012-02-03 07:18:38

由于还没有人添加适用于两个比较的显而易见的解决方案,因此我将提供它:

代码语言:javascript
运行
复制
if (foobar === foo || foobar === bar) {
     //do something
}

而且,如果你有很多值(可能是数百或数千),那么我建议你做一个集合,因为这使得比较代码非常干净和简单,而且在运行时速度很快:

代码语言:javascript
运行
复制
// pre-construct the Set
var tSet = new Set(["foo", "bar", "test1", "test2", "test3", ...]);

// test the Set at runtime
if (tSet.has(foobar)) {
    // do something
}

对于ES6之前的版本,您可以获得一组多边形填充,其中有许多。其中一个是在此other answer中描述的。

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9121395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档