Всем привет. Сейчас осваиваю Javascript через книгу "Выразительный javascript". Там есть раздел объекты. И пример про белку - оборотня. (Да-да именно про оборотня)
Указан вот такой код
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));
Я никак не могу понять как он заполняет массив table. Пожалуйста, если кто может - распишите по подробнее. Заранее огромное спасибо!
Добавлю код комментариями, думаю так будет понятней, хотя мог где то и не правильно выразиться, уточняйте если что:
//Функция которая проверяет есть ли в элементе массива значение 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;
}
В итоге получается что:
76 элементов массива без squirrel = true и без pizza в events
9 элементов массива в которых в массиве events есть pizza и при этом squirrel = false
4 элемента массива в которых в массиве events нет pizza, но squirrel = true
1 элемент массива в котором в массиве events есть pizza и 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
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Столкнулся с понятиями Statement, Expression, ExpressionStatements в книге Douglas CrockfordJavaScript: The Good Parts
Установил новую версию PHPMyAdminВ целом все OK, но в консоли вылезает ошибка JS:
Есть страничка с высотой 4600 пикселей и есть блок кода которое при скролле плавно приближает элементов справа налево или наоборот, но код...