我需要检查一个数组是否包含两个值,只检查它们.
这是我现在丑陋的解决方案:
if (myArray.includes('foo') && myArray.includes('bar') && myArray.length === 2) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
更新:
我可能还需要检查三个或更多值.任何优雅的解决方 顺便说一句,我在这个项目中使用Lodash.
这是你使用的正确方法.但是为了改善比较,你可以把它放在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)
我可能还需要检查三个或更多值.
您可以将元素显示为数组,因此如果要检查的项目超过两个,则条件仍然会短且相同,使用以下.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)