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])) //false

Svar #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

Relaterade artiklar