Now I master Javascript through the book "Expressive javascript". There is a section "objects". And an example about a squirrel - a werewolf. (Yes, yes, about the werewolf)

I just can not understand how it fills the array table . Please, if anyone can - write in more detail. Thank you very much in advance!

Here is the code

 var JOURNAL = [ { "events": ["carrot", "exercise", "weekend"], "squirrel": false }, { "events": ["bread", "pudding", "brushed teeth", "weekend", "touched tree"], "squirrel": false }, { "events": ["carrot", "nachos", "brushed teeth", "cycling", "weekend"], "squirrel": false }, { "events": ["brussel sprouts", "ice cream", "brushed teeth", "computer", "weekend"], "squirrel": false }, { "events": ["potatoes", "candy", "brushed teeth", "exercise", "weekend", "dentist"], "squirrel": false }, { "events": ["brussel sprouts", "pudding", "brushed teeth", "running", "weekend"], "squirrel": false }, { "events": ["pizza", "brushed teeth", "computer", "work", "touched tree"], "squirrel": false }, { "events": ["bread", "beer", "brushed teeth", "cycling", "work"], "squirrel": false }, { "events": ["cauliflower", "brushed teeth", "work"], "squirrel": false }, { "events": ["pizza", "brushed teeth", "cycling", "work"], "squirrel": false }, { "events": ["lasagna", "nachos", "brushed teeth", "work"], "squirrel": false }, { "events": ["brushed teeth", "weekend", "touched tree"], "squirrel": false }, { "events": ["lettuce", "brushed teeth", "television", "weekend"], "squirrel": false }, { "events": ["spaghetti", "brushed teeth", "work"], "squirrel": false }, { "events": ["brushed teeth", "computer", "work"], "squirrel": false }, { "events": ["lettuce", "nachos", "brushed teeth", "work"], "squirrel": false }, { "events": ["carrot", "brushed teeth", "running", "work"], "squirrel": false }, { "events": ["brushed teeth", "work"], "squirrel": false }, { "events": ["cauliflower", "reading", "weekend"], "squirrel": false }, { "events": ["bread", "brushed teeth", "weekend"], "squirrel": false }, { "events": ["lasagna", "brushed teeth", "exercise", "work"], "squirrel": false }, { "events": ["spaghetti", "brushed teeth", "reading", "work"], "squirrel": false }, { "events": ["carrot", "ice cream", "brushed teeth", "television", "work"], "squirrel": false }, { "events": ["spaghetti", "nachos", "work"], "squirrel": false }, { "events": ["cauliflower", "ice cream", "brushed teeth", "cycling", "work"], "squirrel": false }, { "events": ["spaghetti", "peanuts", "computer", "weekend"], "squirrel": true }, { "events": ["potatoes", "ice cream", "brushed teeth", "computer", "weekend"], "squirrel": false }, { "events": ["potatoes", "ice cream", "brushed teeth", "work"], "squirrel": false }, { "events": ["peanuts", "brushed teeth", "running", "work"], "squirrel": false }, { "events": ["potatoes", "exercise", "work"], "squirrel": false }, { "events": ["pizza", "ice cream", "computer", "work"], "squirrel": false }, { "events": ["lasagna", "ice cream", "work"], "squirrel": false }, { "events": ["cauliflower", "candy", "reading", "weekend"], "squirrel": false }, { "events": ["lasagna", "nachos", "brushed teeth", "running", "weekend"], "squirrel": false }, { "events": ["potatoes", "brushed teeth", "work"], "squirrel": false }, { "events": ["carrot", "work"], "squirrel": false }, { "events": ["pizza", "beer", "work", "dentist"], "squirrel": false }, { "events": ["lasagna", "pudding", "cycling", "work"], "squirrel": false }, { "events": ["spaghetti", "brushed teeth", "reading", "work"], "squirrel": false }, { "events": ["spaghetti", "pudding", "television", "weekend"], "squirrel": false }, { "events": ["bread", "brushed teeth", "exercise", "weekend"], "squirrel": false }, { "events": ["lasagna", "peanuts", "work"], "squirrel": true }, { "events": ["pizza", "work"], "squirrel": false }, { "events": ["potatoes", "exercise", "work"], "squirrel": false }, { "events": ["brushed teeth", "exercise", "work"], "squirrel": false }, { "events": ["spaghetti", "brushed teeth", "television", "work"], "squirrel": false }, { "events": ["pizza", "cycling", "weekend"], "squirrel": false }, { "events": ["carrot", "brushed teeth", "weekend"], "squirrel": false }, { "events": ["carrot", "beer", "brushed teeth", "work"], "squirrel": false }, { "events": ["pizza", "peanuts", "candy", "work"], "squirrel": true }, { "events": ["carrot", "peanuts", "brushed teeth", "reading", "work"], "squirrel": false }, { "events": ["potatoes", "peanuts", "brushed teeth", "work"], "squirrel": false }, { "events": ["carrot", "nachos", "brushed teeth", "exercise", "work"], "squirrel": false }, { "events": ["pizza", "peanuts", "brushed teeth", "television", "weekend"], "squirrel": false }, { "events": ["lasagna", "brushed teeth", "cycling", "weekend"], "squirrel": false }, { "events": ["cauliflower", "peanuts", "brushed teeth", "computer", "work", "touched tree"], "squirrel": false }, { "events": ["lettuce", "brushed teeth", "television", "work"], "squirrel": false }, { "events": ["potatoes", "brushed teeth", "computer", "work"], "squirrel": false }, { "events": ["bread", "candy", "work"], "squirrel": false }, { "events": ["potatoes", "nachos", "work"], "squirrel": false }, { "events": ["carrot", "pudding", "brushed teeth", "weekend"], "squirrel": false }, { "events": ["carrot", "brushed teeth", "exercise", "weekend", "touched tree"], "squirrel": false }, { "events": ["brussel sprouts", "running", "work"], "squirrel": false }, { "events": ["brushed teeth", "work"], "squirrel": false }, { "events": ["lettuce", "brushed teeth", "running", "work"], "squirrel": false }, { "events": ["candy", "brushed teeth", "work"], "squirrel": false }, { "events": ["brussel sprouts", "brushed teeth", "computer", "work"], "squirrel": false }, { "events": ["bread", "brushed teeth", "weekend"], "squirrel": false }, { "events": ["cauliflower", "brushed teeth", "weekend"], "squirrel": false }, { "events": ["spaghetti", "candy", "television", "work", "touched tree"], "squirrel": false }, { "events": ["carrot", "pudding", "brushed teeth", "work"], "squirrel": false }, { "events": ["lettuce", "brushed teeth", "work"], "squirrel": false }, { "events": ["carrot", "ice cream", "brushed teeth", "cycling", "work"], "squirrel": false }, { "events": ["pizza", "brushed teeth", "work"], "squirrel": false }, { "events": ["spaghetti", "peanuts", "exercise", "weekend"], "squirrel": true }, { "events": ["bread", "beer", "computer", "weekend", "touched tree"], "squirrel": false }, { "events": ["brushed teeth", "running", "work"], "squirrel": false }, { "events": ["lettuce", "peanuts", "brushed teeth", "work", "touched tree"], "squirrel": false }, { "events": ["lasagna", "brushed teeth", "television", "work"], "squirrel": false }, { "events": ["cauliflower", "brushed teeth", "running", "work"], "squirrel": false }, { "events": ["carrot", "brushed teeth", "running", "work"], "squirrel": false }, { "events": ["carrot", "reading", "weekend"], "squirrel": false }, { "events": ["carrot", "peanuts", "reading", "weekend"], "squirrel": true }, { "events": ["potatoes", "brushed teeth", "running", "work"], "squirrel": false }, { "events": ["lasagna", "ice cream", "work", "touched tree"], "squirrel": false }, { "events": ["cauliflower", "peanuts", "brushed teeth", "cycling", "work"], "squirrel": false }, { "events": ["pizza", "brushed teeth", "running", "work"], "squirrel": false }, { "events": ["lettuce", "brushed teeth", "work"], "squirrel": false }, { "events": ["bread", "brushed teeth", "television", "weekend"], "squirrel": false }, { "events": ["cauliflower", "peanuts", "brushed teeth", "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)); 

  • The characters [ and ] define an array. - nick_n_a
  • @nick_n_a, what did you want to say with your comment? - Grundy

2 answers 2

I will add the code with comments, I think it will be more understandable, although I could somewhere not express myself correctly, specify if that:

 //Функция которая проверяет есть ли в элементе массива значение event, в данном случае pizza //Для случая { "events": ["pizza", "brushed teeth", "work"], "squirrel": false } вернет true //Для случая { "events": ["spaghetti", "peanuts", "exercise", "weekend"], "squirrel": true }, вернет false function hasEvent(event, entry) { return entry.events.indexOf(event) != -1; } function tableFor(event, journal) { // Результат, в 1 элемент записывает если "squirrel": false и нет значения pizza в массиве events // в 2 элемент заносятся данные если есть значение pizza в массиве events // в 3 элемент заносятся данные если значение "squirrel": true // в 4 элемент заносятся данные если есть "squirrel": true и значение pizza в массиве events // Думаю это описано в самой книге var table = [0, 0, 0, 0]; // Проходимся циклом по массиву JOURNAL по каждому элементу массива for (var i = 0; i < journal.length; i++) { //entry - это элемент массива, к примеру - { "events": ["carrot", "exercise", "weekend"], "squirrel": false }, var entry = journal[i], index = 0; //Работу функции описал выше, если нашел pizza тогда index = 1 if (hasEvent(event, entry)) { index += 1; } //Проверяет есть ли в { "events": ["carrot", "exercise", "weekend"], "squirrel": false }, значение squirrel - true //Если true добавляем к index + 2, в итоге может получиться index = 2 или index = 3 если нашли в events pizza if (entry.squirrel) { index += 2; } //Добавляем 1 в таблицу с полученным index table[index] += 1; } return table; } 

The result is that:

76 array elements without squirrel = true and without pizza on events

9 elements of the array in which there is pizza in the events array and at the same time squirrel = false

4 array elements in which there is no pizza in the events array, but squirrel = true

1 array element in which in the events array there is pizza and squirrel = true

     // Сначала table это массив из четырех нулей [0, 0, 0, 0] // Итерация 1: i == 0; entry == { "events": ["carrot", "exercise", "weekend"], "squirrel": false }; index == 0; if (["carrot", "exercise", "weekend"].indexOf("pizza") != -1) { // false, "pizza" нет в первом JOURNAL.events index += 1; // index == 0 } if (entry.squirrel) { // false, entry.squirrel == false index += 2; // index == 0 } table[0] += 1; // 1, table == [1,0,0,0] // Итерация 2: i == 1; entry == { "events": ["bread", "pudding", "brushed teeth", "weekend", "touched tree"], "squirrel": false }; index == 0; if (["bread", "pudding", "brushed teeth", "weekend", "touched tree"].indexOf("pizza") != -1) { // false, "pizza" нет во втором JOURNAL.events index += 1; // index == 0 } if (entry.squirrel) { // false, entry.squirrel == false index += 2; // index == 0 } table[0] += 1; // 2, table == [2,0,0,0] // ... // Итерация 7: i == 6; entry == { "events": ["pizza", "brushed teeth", "computer", "work", "touched tree"], "squirrel": false }; index == 0; if (["pizza", "brushed teeth", "computer", "work", "touched tree"].indexOf("pizza") != -1) { // true, "pizza" есть в JOURNAL.events index += 1; // index == 1 } if (entry.squirrel) { // false, entry.squirrel == false index += 2; // index == 1 } table[1] += 1; // 1, table == [6,1,0,0] // ... // и далее не находит "pizza" и squirrel == false -- растёт 0 элемент table, // находит "pizza", но squirrel == false -- растёт 1-й элемент table, // squirrel == true, но pizza не находит -- растёт 2-й элемент table, // находит pizza и squirrel == true -- растёт 3-й элемент table 
    • while writing @Yaroslav Molchan also answered with code and comments, only he commented on the elements of the algorithm, and I smashed it on the iteration and commented on what happens at each iteration. The index is reset at each iteration to 0 and is calculated depending on the conditions of the new one. - x-positive