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

isa*_*sar 9 javascript

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

这是我现在丑陋的解决方案:

if (myArray.includes('foo') && myArray.includes('bar') && myArray.length === 2) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

更新:

我可能还需要检查三个或更多值.任何优雅的解决方 顺便说一句,我在这个项目中使用Lodash.

Ank*_*wal 6

这是你使用的正确方法.但是为了改善比较,你可以把它放在myArray.length === 2开头就好像长度不是2它会立即失败:

if (myArray.length === 2 && myArray.includes('foo') && myArray.includes('bar')) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

如果您想比较更多值,那么您可以在自定义函数的帮助下检查:

function checkIncluded(myArray, checkingArray){
  if(myArray.length !== checkingArray.length){
    return false;
  }
  var match = true;
  for(var i=0; i<checkingArray.length; i++){
    if(!myArray.includes(checkingArray[i])){
      match = false;
      break;
    }
  }
  return match;
}


var neededItems = ['foo', 'bar', 'pat', 'jack'];
var myArray = ['jack', 'bar', 'foo', 'pat']
var included = checkIncluded(myArray, neededItems);
if (included) {
  console.log('All items matched');
} else {
  console.log('All items do not matched');
}

neededItems = ['bar', 'pat', 'jack'];
myArray = ['jack', 'bar', 'foo', 'pat']
included = checkIncluded(myArray, neededItems);
if (included) {
  console.log('All items matched');
} else {
  console.log('All items do not matched');
}
Run Code Online (Sandbox Code Playgroud)


Zak*_*rki 5

我可能还需要检查三个或更多值.

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

myArray.every(elem => [1,2].indexOf(elem) > -1)
Run Code Online (Sandbox Code Playgroud)

var myArray = [2, 1];
var myItems = [1, 2];

if (myArray.length === myItems.length && myArray.every(elem => myItems.indexOf(elem) > -1)) {
  console.log('PASS');
}
Run Code Online (Sandbox Code Playgroud)

更新:

既然你正在使用lodash,你可以简单地使用_.difference():

if (_.size(myArray) === _.size(myItems) && _.difference(myArray, myItems).length === 0) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)