0

我有这个数组(如下),我正在尝试检查它是否具有特定值。

var a = [ true, "lipsum" ];

我需要做的是检查是否a[0]为真以及是否a[1]为“lipsum”

我可以分别检查这两个值:

a[0] === true && a[1] === 'lipsum' // true

...为了缩短代码,我尝试这样做:

a === [ true, 'lipsum'] // false

为什么上面的代码示例是错误的,还有另一种方法可以实现我想要做的事情吗?


我可以这样做:

a.join() === 'true,lipsum' // true

虽然我不禁觉得有更好的方法..?


4

2 回答 2

1

只检查两个元素的直接方法似乎最好,但我假设您出于维护原因想要这样做,因为最终您可能有几个条件要检查(不仅仅是两个)。如果是这样,您可以执行以下操作,这对于仅两个条件而言似乎很冗长,但随着您开始添加更多条件,它会更合理,因此这里有一个示例,需要检查 5 个条件:

// set a constant somewhere for your truth condition
var COND = [1, 'a', 5, 'b', 0];

// check `a` against the constant array using `every` (Thanks Bergi)
if (a.every(function(v, i){ return COND[i] === v; })) {
    // all array elements the same
}
于 2013-02-14T00:00:40.893 回答
0

每个数组都是一个单独的对象,因此不能使用相等运算符来比较它们。假设您要对已知参数进行严格比较,那么您使用的第一种方法是最好的。

如果您有另一个原始数组必须包含的参数数组,则必须使用循环,尽管您可以抽象它:

Array.prototype.contains = function (array) {
    for (var x = 0; x < array.length; x++) {
        if (this.length < x || this[x] !== array[x]) {
            return false;
        }
    }
    return true;
}

http://jsfiddle.net/q5DvG/1/

于 2013-02-13T23:53:20.880 回答