const D = new Date();
– создать объект Date на сейчас;D.setDate(D.getDate() + 1)
— так можно получить следующий деньD.getDay()
— получить день недели от 0 (вск) до 6 (суббота)inArray()
возвращает ... ещё одну функцию, которую только что создала при вызове:function inArray(arr) {
const result = function(x) {
// внутри этой функции будет ещё и доступен
// arr, с которым вызвали inArray()
return arr.includes(x);
};
return result;
}
Т.е. вызов inArray()
с каким-то массивом возвращает всего лишь ещё одну функцию, которая принимает любой аргумент, но ещё и «запомнила» конкретный arr
, с которым её создали.const myFilter = inArray([1, 2, 10]);
это свежесозданная функция, которая для любого аргумента возвращает true/false — есть ли это же значение в массиве [1, 2, 10]
const maskCcNumber = num => {
const str = num.toString();
const length = str.length;
const keep = 4;
if (length < keep) return str;
const star = '*';
return str.substring(0, 4) + star.repeat(length - 4);
}
maskCcNumber(454511111111112) // 4545***********
"454511111111112".replace(/(.{4})(.*)/, (_, p1, p2) => p1 + '*'.repeat(p2.length))
см. String.replace() -numbers += 1;
+numbers -= 1;
from
, но отсутствует в to
. От него пляшем по цепочке, добавляя инкрементируемое свойство для сортировки.const allFrom = tickets.map(item => item.from);
const allTo = tickets.map(item => item.to);
let city = allFrom.filter(item => !allTo.includes(item)).pop(); // первый город
const w = Symbol(); // чтобы случайно не затереть существующее свойство
let i = 0;
let ticket;
while (ticket = tickets.find(t => t.from === city)) {
ticket[w] = i++;
city = ticket.to;
}
// ура! сортировка!
tickets.sort((a, b) => a[w] - b[w]);
tickets.forEach(t => delete t[w]);
$array = [
["TITLE" => "Тест 1", "LEVEL" => 1,],
["TITLE" => "Тест 2", "LEVEL" => 2,],
["TITLE" => "Тест 3", "LEVEL" => 2,],
["TITLE" => "Тест 4", "LEVEL" => 3,],
["TITLE" => "Тест 5", "LEVEL" => 2,],
["TITLE" => "Тест 6", "LEVEL" => 3,],
];
const TITLE = 'TITLE';
const LEVEL = 'LEVEL';
const CHILDREN = 'CHILDREN';
$result = [];
$refs = [];
foreach ($array as $item) {
$level = $item[LEVEL];
if ($level === 1) {
$result[] = $item;
$refs = [&$result[count($result) - 1]];
} else {
for ($i = count($refs) - 1; $i >= 0; $i--) {
$parent = &$refs[$i];
if ($parent[LEVEL] === $level - 1) {
if (!isset($parent[CHILDREN])) {
$parent[CHILDREN] = [];
}
$parent[CHILDREN][] = $item;
array_splice($refs, $i + 1);
$refs[] = &$parent[CHILDREN][count($parent[CHILDREN]) - 1];
unset($parent);
break;
} else {
unset($parent);
continue;
}
}
}
}
echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
[
{
"TITLE": "Тест 1",
"LEVEL": 1,
"CHILDREN": [
{
"TITLE": "Тест 2",
"LEVEL": 2
},
{
"TITLE": "Тест 3",
"LEVEL": 2,
"CHILDREN": [
{
"TITLE": "Тест 4",
"LEVEL": 3
}
]
},
{
"TITLE": "Тест 5",
"LEVEL": 2,
"CHILDREN": [
{
"TITLE": "Тест 6",
"LEVEL": 3
}
]
}
]
}
]