Автор этого добра заявляет, что это абсолютно нормальная практика - выносить каждые пару строк в отдельную функцию.
Нормальная ли?
screen, уже не боясь оставить/отключиться, вместо scp, может, удобнее воспользоваться rsync — он зипует, что может ускорить передачу:rsync -avz /var/www/projectOldName user@newserver.example.com://var/www/projectNewNameCtrl + A, D — чтобы покинуть работающий вирт. терминал и спокойно отключиться от SSH. Позже, когда снова зайдете, командой screen -r снова подключитесь к оставленной сессии.
^ - это операция XOR. XOR вернёт единицу в том случае, если один из операндов (битов) 1 а другой 0. Таким образом, к примеру, 3 ^ 5 вернет 6 потому, что 0b011 ^ 0b101 (для простоты, биты будем считать слева направо):0 ^ 1 = 1.1 ^ 0 = 1.1 ^ 1 = 0.0b110 = 6.undefined ^ N или 0 ^ N, что вернёт нам само число.
const getDuplicatesIndex = (arr, key = n => n) =>
Object.fromEntries(Object
.entries(arr.reduce((acc, n, i) => ((acc[key(n)] ??= []).push(i), acc), {}))
.filter(n => n[1].length > 1)
);Map:const getDuplicatesIndex = (arr, key = n => n) =>
new Map(Array
.from(arr.reduce((acc, n, i) => {
const k = key(n);
acc.set(k, acc.get(k) ?? []).get(k).push(i);
return acc;
}, new Map))
.filter(n => ~-n[1].length)
); dd выводит отчёт не в stdout, а в stderr. Так что нужно сначала перенаправить stderr в stdout, а потом передавать его в tee:# башизм
dd if=/dev/zero of=/tmp/zerofile bs=100M count=5 |& tee ku.log &
# должно работать везде
dd if=/dev/zero of=/tmp/zerofile bs=100M count=5 2>&1 | tee ku.log &
const isIterable = x =>
x?.[Symbol.iterator] instanceof Function;isIterable([]) // true
isIterable('') // true
isIterable(document.scripts) // true
isIterable(Array().keys()) // true
isIterable((function*(){})()) // true
isIterable() // false
isIterable(null) // false
isIterable(1) // false
isIterable({}) // false
isIterable(isIterable) // false
Несмотря на долгий срок работы в проекте, нахожу новые интересные задачи, которые не позволяют заскучать.
function test() {
const a = [1];
return a[0] += 3; // что вы вернет?
}a?// с запятой
array.reduce((a,b,i)=>function(){
const sum = a[i%2] + b; // вычисление
a[i%2] = sum; // присваивание
return a; // возврат массива
}, [0,0]);
// без запятой
array.reduce((a,b,i)=>function(){
const sum = a[i%2] + b; // вычисление
a[i%2] = sum; // присваивание
return sum; // возврат результат суммирования
// и на следующей итерации будет ошибка из-за попытки обратиться к числу как к массиву.
}, [0,0]); React.KeyboardEvent - это синтетическое событие, которое генерируется в React. KeyboardEvent - это оригинальное событие, которое генерируется в браузере.KeyboardEvent лежит в event.nativeEvent у React.KeyboardEvent.const closeByESC = (event: KeyboardEvent | React.KeyboardEvent) => {document.addEventListener('keydown', closeByESC); { сумма: счётчик }, сколько раз каждая сумма встретилась на всём диапазоне 000..999 (для n = 6, т.е. половина = 3)function getLuckyTicketsCount(n) {
const sums = {};
for (let i = 0; i < Math.pow(10, n >> 1); i++) {
// посчитать сумму цифр
let sum = 0, d = i;
while (d > 0) {
sum += d % 10; // прибавили младшую цифру
d = Math.floor(d / 10); // сдвинули число вправо на 1 цифру
}
// и в словарь прибавить 1 для этой суммы
sums[sum] = (sums[sum] || 0) + 1;
}
return Object.values(sums) // счетчики суммм
.map((n) => n * n) // квадраты
.reduce((acc, c) => acc + c); // сложить все
}