检查数组是否仅在JavaScript中包含一次值

时间:2018-07-17 07:04:17

标签: javascript arrays counting

我有两个布尔数组:

arr1 = [true, false, false, true]
arr2 = [false, false, false ,true]

我想制作一个仅在arr1和arr2包含以下内容时才返回true的函数 true,但每个数组只有一个true。例如,对于上述数组,该函数必须返回false。如果数组是这样的:

arr1 = [true, false, false, false]
arr2 = [false, false, false ,true]

该函数将返回true。 Tou知道一种无需计算元素的快速方法吗?

4 个答案:

答案 0 :(得分: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));

答案 1 :(得分:1)

您可以搜索值的索引2次

function isUnique(myArray,value){
    let index = myArray.indexOf(value)
    if (index >= 0 && index+1 < myArray.length-1){
        return myArray.indexOf(value,index+1) == -1
    }
    return index >= 0 
}

// then
let result = isUnique(arr1,true) && isUnique(arr2,true)

答案 2 :(得分:0)

我认为此功能可以解决问题。

 testFunc = () => {
   const arr1 = [true, false, false, false];
   const arr2 = [false, false, false ,true];

   return arr1.filter(val => val).length === 1 && arr2.filter(val => val).length === 1;
 };

答案 3 :(得分:0)

var arr2 = [true, false, false ,true];
var isOnlyOne = arr2.indexOf(true) != -1;
isOnlyOne = isOnlyOne ? arr2.indexOf(true)==arr2.lastIndexOf(true):isOnlyOne;
console.log(isOnlyOne );

以上逻辑可用于解决您的问题。