Řešení Finders Keepers / freeCodeCamp Algorithm Challenges

Příspěvek najdete také na mém webu https://virenb.cc/fcc-009-finders-keepers

Pojďme vyřešit základní výzvu skriptování základního algoritmu freeCodeCamp, "Finders Keepers"

Náš startovací kód (a testy)

function findElement(arr, func) {
  let num = 0;
  return num;
}

findElement([1, 2, 3, 4], num => num % 2 === 0);

// Tests
findElement([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; }) should return 8.
findElement([1, 3, 5, 9], function(num) { return num % 2 === 0; }) should return undefined.

Naše pokyny

Vytvořte funkci, která prohlédne pole (první argument) a vrátí první prvek v poli, který projde testem pravdivosti (druhý argument). Pokud testem neprojde žádný prvek, vrátí se undefined.

Myšlenky

  • Jako vstupy máme dva argumenty, jeden je arr je pole, func být funkcí
  • Musíme vrátit číslo nebo nedefinované na základě testů
  • Budeme muset porovnat pole v arr proti omezením v func

Další myšlenky

Když si znovu přečteme instrukce, budeme muset pole porovnat s funkcí poskytnutou v func , vrací první num který splňuje omezení. Pokud v poli nejsou žádné hodnoty, které by prošly 'testem' v func , vrátí undefined .

Když to čtu, myslím, že bychom měli používat nějakou smyčku na arr , přičemž každou hodnotu porovnáte s func test.

Obvykle se pokusím použít modernější metodu, jako je map() , ale nemyslím si, že je to nejlepší případ, protože se musíme ze smyčky „vymanit“, jakmile splníme první hodnotu, která je pravdivá proti func test.

Startovací kód nám dává let num = 0 . Změním to na let num; takže je to undefined začít. Pokud testem neprojdou žádné hodnoty v poli, stále vrátíme num , což nám dává undefined .

Rozhodnu se pro smyčku for, která bude procházet polem, a nastavím num na hodnotu indexu pole, která je true a poté okamžitě vraťte num;

Chci okamžitě vrátit první hodnotu kvůli jednomu z testů. Když se podíváte na níže,

findElement([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; }) should return 8.

Jak 8, tak 10 jsou dělitelné 0, takže pokud se ze smyčky nevymaníme, num bude nakonec nastaveno na 10, čímž se přepíše 8. Chceme však 8.

Zde je malý pseudokód:

function findElement(arr, func) {
  create num variable, assign no value yet  
  for (let i = 0; i < arr's size; i++) {
    if (func(arr[i]) is true) 
        set num equal to arr[i]
        return num to stop the loop    

  return num
}

Řešení

[SPOILER:ŘEŠENÍ K NÍŽE uvedenému kódu]

function findElement(arr, func) {
    let num;
    for (let i = 0; i &lt; arr.length; i++) {
        if (func(arr[i])) {
            num = arr[i];
            return num;
        }
    }
    return num;
}

Odkazy a zdroje

Repeat a String Repeat a String Challenge na fCC

freeCodeCamp

Přispějte FCC!

Řešení na mém GitHubu

Děkuji za přečtení!