在javascript中检查数组是否只包含一次值

use*_*203 -3 javascript arrays counting

我有两个布尔数组:

arr1 = [true, false, false, true]
arr2 = [false, false, false ,true]
Run Code Online (Sandbox Code Playgroud)

我想创建一个只有当arr1和arr2包含true但每个数组只有一个true时才返回true的函数.例如,对于上面的数组,函数必须返回false.如果数组是这样的:

arr1 = [true, false, false, false]
arr2 = [false, false, false ,true]
Run Code Online (Sandbox Code Playgroud)

该函数将返回true.您是否知道快速实现这一目标的方法而无需计算元素?

Ank*_*wal 6

您可以检查元素的第一个索引和最后一个索引的值是否相同:

function check(arr1, arr2){
  var firstIndexArr1 = arr1.indexOf(true);
  var lastIndexArr1 = arr1.lastIndexOf(true);
  var firstIndexArr2 = arr2.indexOf(true);
  var lastIndexArr2 = arr2.lastIndexOf(true);
  return (firstIndexArr1 !== -1 && firstIndexArr1 === lastIndexArr1) && 
  (firstIndexArr2 !== -1 && firstIndexArr2 === lastIndexArr2);
}
//return true
var arr1 = [true, false, false, false];
var arr2 = [false, false, false ,true];
console.log(check(arr1, arr2));

//return false
arr1 = [true, false, false, true];
arr2 = [false, true, false ,true];
console.log(check(arr1, arr2));

//return false if none of the array has true
arr1 = [false, false, false, false];
arr2 = [false, false, false ,false];
console.log(check(arr1, arr2));
Run Code Online (Sandbox Code Playgroud)