Kontrollera om minst två element i en array är större än noll - JavaScript/Typescript
Finns det ett smart sätt att ta reda på om det finns minst två värden större än 0 i en array och returnera true? Och false i motsatt fall?
(hypotetiskt och felaktigt exempel som använder some):
const a = [9, 1, 0];
const b = [0, 0, 0];
const c = [5, 0, 0];
const cond = (el) => el > 0 && somethingElseMaybe;
console.log(a.some(cond)); // print true
console.log(b.some(cond)); // print false
console.log(c.some(cond)); // print false
Svar #1
Använd filter() för att ta bort värden under noll och kontrollera sedan om length på den resulterande arrayen är större än eller lika med två
const twoGreaterThanZero = arr => arr.filter(x => x > 0).length >= 2;
console.log(twoGreaterThanZero([9, 1, 0])) //true
console.log(twoGreaterThanZero([0, 0, 0])) //false
console.log(twoGreaterThanZero([5, 0, 0])) //falseSvar #2
För att undvika slöseri med ansträngning bör du stoppa kontrollen så snart villkoret är uppfyllt. Jag tror att detta uppfyller ditt krav.
function twoGreaterThanZero(arr) {
let counter = 0
for(let x of arr) {
if(x > 0 && (++counter > 1)) return true
}
return false
}
const a = [9, 1, 0]
const b = [0, 0, 0]
const c = [5, 0, 0]
console.log(twoGreaterThanZero(a)) // print true
console.log(twoGreaterThanZero(b)) // print false
console.log(twoGreaterThanZero(c)) // print false