我有这个数组(下面),我正在尝试检查它是否有特定值。
var a = [ true, "lipsum" ];
我需要做的是检查a[0]
是否为真,a[1]
是否为“lipsum”
我可以分别检查两个值:
a[0] === true && a[1] === 'lipsum' // true
...为了缩短代码,我试着这样做:
a === [ true, 'lipsum'] // false
为什么上面的代码示例为false,是否有其他方法可以实现我的目标?
我可以这样做:
a.join() === 'true,lipsum' // true
虽然我不禁觉得有更好的方法..?
答案 0 :(得分: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
}
答案 1 :(得分: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;
}