我有两个布尔数组:
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知道一种无需计算元素的快速方法吗?
答案 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 );
以上逻辑可用于解决您的问题。