Что вообще с фреймворком? Он развивается?
Если да то в какую сторону и что слышно про Vue 4?
Про React знаю, но интересуют именно Vue и ему подобные фреймворки
clip-path
прекрасно умеет скруглять, rtfm.1) Не понятно, что конкретно должна делать hash функцияВычисляет хэш от ключа. Остаток от деления хэша на длину массива - это индекс бакета, в котором будет хранится пара ключ-значение.
2) Какой тип использовать у bucketsКак вариант такой:
type Buckets<K, V> = ([K, V] | undefined)[];
const units = [
[ 'де?н', 24 * 60 * 60 ],
[ 'час', 60 * 60 ],
[ 'мин', 60 ],
[ 'сек', 1 ],
].map(n => [ RegExp(`\\d+(?=\\s+${n[0]})`), n[1] ]);
const getSeconds = str =>
units.reduce((acc, n) => acc + n[0].exec(str) * n[1], 0);
getSeconds('2 часа 22 секунды') // 7222
getSeconds('99 минут') // 5940
getSeconds('1 час 1 минута 1 секунда') // 3661
getSeconds('1 день 23 часа 59 минут 60 секунд') // 172800
getSeconds('2 дня') // 172800
getSeconds('546 секунд и ещё 2 минуты') // 666
RegExp(`\\d+(?=\\s+${n[0]})`, 'g')
, а функция подсчёта секунд примет следующий вид:const getSeconds = str =>
units.reduce((seconds, [ reg, multiplier ]) => {
return [...str.matchAll(reg)].reduce((acc, n) => acc + n * multiplier, seconds);
}, 0);
// или
const getSeconds = str => units
.flatMap(n => (str.match(n[0]) ?? []).map(m => m * n[1]))
.reduce((acc, n) => acc + n, 0);
// или
const getSeconds = str => eval(units
.map(n => `${n[1]} * (${str.match(n[0])?.join('+') ?? 0})`)
.join('+')
);
getSeconds('1 секунда плюс 3 секунды плюс 5 секунд') // 9
getSeconds('21 день, 7 дней, да ещё 3 дня - всего секунд в мае месяце будет') // 2678400
indexOf( ID )
в массиве, задающем порядок сортировки:var data = [
{ID: 1, country: 'England'},
{ID: 4, country: 'USA'},
{ID: 9, country: 'Russia'},
{ID: 5, country: 'Germany'},
{ID: 6, country: 'France'},
];
const order = [5,1,9,6,4];
data.sort((a,b) => order.indexOf(a.ID) - order.indexOf(b.ID));
/* [
{"ID":5,"country":"Germany"},
{"ID":1,"country":"England"},
{"ID":9,"country":"Russia"},
{"ID":6,"country":"France"},
{"ID":4,"country":"USA"}]
*/
data = data.map( e => {e.sortBy = order.indexOf(e.ID); return e;} );
data.sort( (a,b) => a.sortBy - b.sortBy);
- i while(<= arr){
+ i while(<= arr.length){
function one() {
const oneVar = 'Hello!'
let counter = 0;
console.log('функция one работает прямо сейчас, в счетчике', counter)
function two() {
console.log(oneVar, ++counter)
}
console.log('функция one почти завершилась, в счетчике все еще ', counter);
return two
}
const three = one();
console.log('функция one точно завершилась, даже return сработал');
console.log('в переменной three сейчас функция two()');
console.log(three);
three();
three();
three();
console.log('обожемой, мы видим как менялась переменная в уже завершенной функции. чераная магия? нет - это называется замыкание!');
"функция one работает прямо сейчас, в счетчике", 0
"функция one почти завершилась, в счетчике все еще ", 0
"функция one точно завершилась, даже return сработал"
"в переменной three сейчас функция two()"
function two() {
console.log(oneVar, ++counter)
}
"Hello!", 1
"Hello!", 2
"Hello!", 3
"обожемой, мы видим как менялась переменная в уже завершенной функции. чераная магия? нет - это называется замыкание!"
Consistent useEffect timing: React now always synchronously flushes effect functions if the update was triggered during a discrete user input event such as a click or a keydown event.
document
, дальше событие клика по кнопке продолжило всплывать и попало в только что установленный обработчик.При добавлении задержки, данная проблема уходит
document.addEventListener('click', handleOutsideClick, true);
return () => document.removeEventListener('click', handleOutsideClick, true);