Exercise of the book Eloquent Javascript

Asked

Viewed 69 times

0

Hello, I’m a beginner in programming. I’m using the book for my studies in Javascript Eloquent Javascript. I do not understand the operation of the code below:

Code

var JOURNAL = [
   {
      "events":["carrot","exercise","weekend"],
      "squirrel":false
   },
   ...
];

function hasEvent(event, entry) {
   return entry.events.indexOf(event) != -1;
}

function tableFor(event, journal) {
   var table = [0, 0, 0, 0];
   for (var i = 0; i < journal.length; i++) {
      var entry = journal[i], index = 0;
      if (hasEvent(event, entry)) index += 1;
      if (entry.squirrel) index += 2;
      table[index] += 1;
   }
   return table;
}
console.log(tableFor("pizza", JOURNAL)); // → [76, 9, 4, 1]

JOURNAL

https://eloquentjavascript.net/2nd_edition/code/jacques_journal.js

My doubt

In general, I know that the function travels through the loop in search of the record that corresponds to the event determined in the argument. However, how it comes to this result is unknown to me and for once I did not find material to answer my questions.

  • JOURNAL would be exactly what?

  • It is an array. The complete code is here: https://eloquentjavascript.net/2nd_edition/code/jacques_journal.js

  • Please ask the question.

1 answer

0



function hasEvent(event, entry) {
   /*
   Retorna true/false se o array "events" do objeto "entry" contém o "event".
   Aqui, verifica-se se o índice em que o event está. Caso não exista o event selecionado,
   ele retorna -1.
   Na maioria dos casos 0 é um retorno equivalente à false no JS, mas como esta função
   retorna um índice e 0 é um índice válido, para não gerar confusão, aqui é retornado -1
   */

   return entry.events.indexOf(event) != -1;
}

function tableFor(event, journal) {
   // Esta é tabela de ocorrência de eventos
   var table = [0, 0, 0, 0];

   // Percorre o array
   for (var i = 0; i < journal.length; i++) {
      // entry é um objeto dentro de journal
      // index é definido como o primeiro índice da tabela
      var entry = journal[i], index = 0;

      // Se o event informado existe, adiciona 1 ao índice do array.
      // Se for true, index agora é 1 e aponta para o segundo índice da tabela 
      if (hasEvent(event, entry)) index += 1;

      // Se a propriedade squirrel for true, adiciona 2 ao índice do array.
      // Se for true, index agora é 2 e aponta para o terceiro índice da tabela, mas se
      // a condição anterior também for true, index será na verdade 3 e apontará para
      // a quarta posição da tabela.
      if (entry.squirrel) index += 2;

      // Seleciona o índice que foi calculado anteriormente e soma um ao seu valor
      table[index] += 1;
   }
   return table;
}
  • Thanks :) everything became clearer now.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.