如何检查JavaScript数组是否仅包含两个特定值

如何检查JavaScript数组是否仅包含两个特定值,javascript,Javascript,我需要检查数组是否包含两个值,并且只包含它们 这是我目前丑陋的解决方案: if (myArray.includes('foo') && myArray.includes('bar') && myArray.length === 2) { // Do something } 更新: 我可能还需要检查三个或更多的值。 有优雅的解决方案吗?顺便说一下,我正在这个项目中使用。这是您使用的正确方法。但是为了改进比较,您可以将myArray.length==2放在开

我需要检查数组是否包含两个值,并且只包含它们

这是我目前丑陋的解决方案:

if (myArray.includes('foo') && myArray.includes('bar') && myArray.length === 2) {
    // Do something
}
更新:

我可能还需要检查三个或更多的值。
有优雅的解决方案吗?顺便说一下,我正在这个项目中使用。

这是您使用的正确方法。但是为了改进比较,您可以将
myArray.length==2
放在开头,就好像长度不是
2
一样,它将立即失败:

if(myArray.length==2&&myArray.includes('foo')&&myArray.includes('bar')){
//做点什么
}
我可能还需要检查三个或更多的值

您可以将元素表示为一个数组,因此,如果要检查的项目超过两个,则使用
.every()
方法,条件仍然很短且相同,如:

myArray.every(elem => [1,2].indexOf(elem) > -1)
var myArray=[2,1];
var myItems=[1,2];
if(myArray.length==myItems.length&&myArray.every(elem=>myItems.indexOf(elem)>-1)){
console.log('PASS');

}
另一种非常简单的方法:

const checkExact=(arr,v1,v2)=>`${v1}${v2}`==字符串(arr.join(“”);
常数arr1=[1,2,3];
常数arr2=[15,23];
常量arr3=[“foo”,“bar”];
常量arr4=[“foo”、“bar”、“foobar”];
console.log(
checkExact(arr1,1,2),//false
checkExact(arr2,15,23),//正确
checkExact(arr3,“foo”,“bar”),//true
checkExact(arr4,“foo”,“bar”)//false
);
//更一般
常量checkExactX=(arr,…值)=>
values.reduce((p,n)=>`${p}${n}`,“”)===String(arr.join(“”);
常量arr5=[“foo”、“bar”、“foobar”、“barfoo”];
console.log(
checkExactX(arr1,1,2),//false
checkExactX(arr2,15,23),//正确
选中ExactX(arr3,“foo”,“bar”),//正确
选中ExactX(arr4,“foo”,“bar”,“foobar”),//true
选中ExactX(arr4,“foobarfoobar”),//true
checkExactX(arr5,“foo”,“bar”,“foobar”)//false

);结尾的“&&”有什么作用?@ramden nothing为
['foo','foo']
['foo','bar']
返回true(但OP对此不清楚)。检查我的建议@isarThank you。。。我这样做了,但在我这么做之前,它并没有像预期的那样工作:
(myArray.length==myItems.length&&&&.difference(myArray,myItems.length==0)
。是的,如果你想使用lodash,请使用
检查我的更新。size
为什么要使用lodash函数,而香草JS是更好更清晰的选项?它有什么优势吗?为什么你认为它更好更清晰?