<!DOCTYPE html><html lang="ru">
<head>
<meta charset="UTF-8">
<title>test</title>
<script>
document.addEventListener('DOMContentLoaded', function() {
let NawCont = document.getElementById('root'); // Получаем текущие блоки
let NewDiv = document.createElement('div'); // Создаём новый блок
NewDiv.className = "NewClassEl"; // Добавляем новому блоку класс
NewDiv.appendChild(NawCont); // Вставляем в новый блок контент
document.body.appendChild(NewDiv); // Вставялем это всё на страницу
});
</script>
</head>
<body>
<div id="root">
<div class="root-header">
1
</div>
<div class="root-content">
2
</div>
</div>
</body>
</html>
const arr = Array.from({ length: max - min + 1 }, (n, i) => i + min);
function* range(start, stop, step) {
if (stop === undefined) {
stop = start;
start = 0;
}
if (start === stop) {
step = 1;
}
if (step === undefined) {
step = Math.sign(stop - start);
}
if (start <= stop && step > 0 || start >= stop && step < 0) {
for (let i = start; step < 0 ? i >= stop : i <= stop; i += step) {
yield i;
}
}
}
console.log(Array.from(range(3, 9))); // [3, 4, 5, 6, 7, 8, 9]
console.log([...range(-5)]); // [0, -1, -2, -3, -4, -5]
for (const n of range(100, 200, 33)) {
console.log(n); // 100 133 166 199
}
const r = range(12, -7, -5);
for (let n; !(n = r.next()).done; ) {
console.log(n.value); // 12 7 2 -3
}
пользовательский хук не обязательно должен иметь конкретную сигнатуру. Мы можем решить, что он принимает в качестве аргументов, и должен ли он что-либо возвращать. Другими словами, всё как в обычных функциях.
const arr = [
{ date: '230389' },
{ date: '230389' },
{ date: '230389' },
{ date: '240389' },
{ date: '240389' },
{ date: '250389' },
{ date: '250389' },
]
const currentDate = new Date('1989-03-24');
const res = arr.reduce((result, item) => {
const matches = item.date.match(/\d{2}/g).reverse()
const isoFormat = [`19${matches[0]}`, ...matches.slice(1)]
const date = new Date(isoFormat)
switch (currentDate.getDate() - date.getDate()) {
case 1:
result.yesterday.push(item)
break;
case 0:
result.today.push(item)
break;
case -1:
result.tomorrow.push(item)
break;
}
return result
}, {
yesterday: [],
today: [],
tomorrow: []
})
const nextAfter = (arr, value) => {
const ind = arr.indexOf(value)
if (ind < 0) return
return arr[ind + 1] // для предыдущего -1
}
arr.find((v, ind, arr) => arr[ind - 1] === value)
// для предыдущего +1, не путать с первым примером
if start1 <= finish2 and start2 <= finish1 then пересечение_есть else пересечения_нет
Возможно, знак равенства надо убрать - в зависимости, засчитывается ли пересечение интервалов в одной точке. const intervals = [
{ start: '11:00:00', end: '13:00:00' },
{ start: '15:00:00', end: '17:00:00' }
]
const findIntersection = (intervals, start, end) =>
intervals.find(
interval => start < interval.end && interval.start < end
)
findIntersection(intervals, '09:00:00', '11:00:00')
// undefined
findIntersection(intervals, '09:00:00', '12:00:00')
// Object { start: "11:00:00", end: "13:00:00" }
const timestamp = (year, month = 1, day = 1) => new Date(year, month - 1, day).getTime();
const entries = [
{
type: 'error',
date: timestamp(2020, 4, 30)
},
{
type: 'log',
date: timestamp(2020, 4, 29)
},
{
type: 'info',
date: timestamp(2020, 4, 25)
}
];
const date = new Date();
const today = timestamp(date.getFullYear(), date.getMonth() + 1, date.getDate());
const interval = 24 * 60 * 60 * 1000;
const entry = entries.find(entry => (entry.date >= today && entry.date <= today + interval));
console.log(entry); // { type: 'error', date: 1588183200000 }