function
, но в данном коде это то же самое age: v => v >= 25,
age: (v) => v >= 25,
age: (v) => {
return v >= 25;
},
age: function (v) {
return v >= 25;
},
В общем, в свойство age
записывается значением функция, которая принимает единственный аргумент и возвращает Булево значение. true
если аргумент больше или равен 25. Иначе false
.[ключ, значение]
для итерируемых свойств объекта-аргумента. Т.е. для нашего filters
получится массив [ ["age", function1], ["education", function2], ... ]
forEach()
Используя деструктурирующее присваивание из переданного в функцию аргумента-массива-пары сразу вытаскиваем в переменные name
и func
. Можно было бы длиннее: .forEach((pair) => {
const name = pair[0];
const func = pair[1];
// ...
})
name
– это имя очередного фильтра: строки "age", "education", и т.д.func
это очередная соотв. функция, которые мы там раньше в filters
определили. Для age
это та функция (v) => v >= 25
. Функция, которая возвращает Булево значение (true или false). В нормальном случае true. Если значение НЕ соответствует ожиданиям, то false. Вот этот случай ошибки и нужен, поэтому инвертируем Булево значение: !false === true
Т.е. в if ()
попадаем, когда функция проверки возвращает ошибку, false
. { ИмяСвойства: ФункцияКотораяПроверяет }
(обновил ответ)<?php
$data = [ // все-все динамические данные для страницы
'list_of_rooms' => [$room1, $room2],
'list_of_passengers' => [ ],
'prices' => [ 'A' => 195.5, 'B' => 135.2 ],
];
printf('<script>
try {
const data = %s;
} catch(err) { console.error(err); }
</script>', json_encode($data);
А дальше вы на фроте эти данные из data.list_of_passengers
уже используйте по-человечески ) 1e12
vs 8-значный ключ a-zA-Z0-9 = 26+26+10 = 62
62^8 / 1e12 ~= 218.34
JSON.parse()
fetch()
ресолвится в объект Response. У того есть свойство body
, которое можно прочесть сразу. Но это не принятные данные, а ReadableStream, который можно читать только асинхронно. application/*
тип надо обрабатывать.