{ сумма: счётчик }
, сколько раз каждая сумма встретилась на всём диапазоне 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); // сложить все
}
В чём отличие от присваиваниятолько в том, что сохранили значение, которое возвращает вызов. Для этой функции это значение некий уникальный id, по которому, при необходимости, можно отменить вызов черезa = requestAnimationFrame(anim)
и от обычного вызоваrequestAnimationFrame(anim)
?
cancelAnimationFrame()
, но в приведённом коде это значение никак не используется.Почему идёт каждый раз вызов функции anim()
Первый раз потому, что в конце кода стоит вызов requestAnimationFrame()
. Последующие — потому, что в конце очередной отработки anim() есть вызов a = requestAnimationFrame(anim);
при условии, что счётчик не превышен. ts
транспилировать, если прикрутить соотв. примочку. Например, про WebPack в документации TypeScript, или про TypeScript в конфигурации Vite (умеет из коробки). const foo = function(arg) {
return arg > 2;
}
function mapper(array, func) {
return array.map(func);
}
mapper([1, 2, 3], foo);
(arg) => arg > 2;
почти то же самое, что определение функции foo()
выше. .then(onFulfilled, onRejected)
вторая функция «ловит» ошибку и обрабатывает её, поэтому выполнение не прерывается..catch()
в конце цепочки.// ...
, function(reason) {
console.log(reason); // Ошибка! (Тут Скрипт должен прервать дальнейшее выполнение!)
return Promise.reject(reason); // передаём пас с ошибкой дальше по цепочке
})
и всё равно добавьте в конце блок .catch()
function test() {
// ...
}
const code = test.toString(); // код функции
// TODO: убрать всё снаружи if { }
code.match(/count/g).length // сколько раз используется
let count
применить defineProperty
, где в своих getter и setter считать обращения. Object.fromEntries(Object.entries(arr.reduce((acc, c) => (acc[c] = (acc[c] ?? 0) + 1, acc), {})).filter((pair) => pair[1] > 2)
вернёт объект {значение: счётчик}
из элементов, которых «больше 2 шт». Для примера в вопросе вернёт {1: 3}
, т.е. «единиц — было три»reduce()
'ом проходим по массиву, собирая словарь, где ключи – уникальные значения из массива, а значения – счётчики, сколько раз каждое встретилось.[ключ, значение]
; фильтруем, оставляя только те, где значение > 2, и снова собираем в объект.\D
("a2-9f-gg-7232").replace(/\D/g, "")
// "297232"
В браузере — работает.\D
обозначает «всё, кроме цифр»\d
, для сравнения, как раз означает любую цифруg
флаг от слова global, искать не до первого совпадения, а по всей строке.