const recursiveSum = x => {
if (x.toString() === '[object Object]') {
const values = Object.values(x);
return values.reduce((acc, v) => acc + recursiveSum(v), 0);
}
const n = Number(x);
return Number.isNaN(n) ? 0 : n;
};
recursiveSum(obj) // 45
Так можно обработать объект любой глубины вложенности и с любыми значениями function getRandom(arrChances) {
const total = arrChances.reduce((acc, cur) => acc + cur);
const random = Math.floor(Math.random() * total);
for (let i = 0, top = 0; i < arrChances.length; i++) {
top += arrChances[i];
if (top > random) {
return i;
}
}
}
getRandom([ 1, 100 ]) // чаще всего будет 1. 0 очень редко
getRandom([ 1, 1 ]) // поровну будут выпадать то 0 то 1
getRandom([ 100, 700, 200 ])
0.1 + 0.2 !== 0.3 // true
0.1 + 0.2 // 0.30000000000000004
#
/Love/handler.php
отдавайте коротенький JavaScript, который вытащит window.location.hash
и отправит его дополнительным запросом PUT в фоне в тот же /Love/handler.psp
или любой другой URL на вашем сайте, который уже и сохранит токен. function()
, было, упомянул потому, что, как и var
, объявления функций function
«всплывают» наверх — ещё один неочевидный момент. function
не атавизм. "use strict";
display: none
Так по умолчанию, если скрипты не работают, видна нормальная страница (в т.ч. поисковикам).Далее JS должен посмотреть, сколько время сейчас в браузере у посетителя. И при необходимости вмешаться и добавить класс "hidden" основному блоку, и убрать его же у заглушки.
Element.classList.add("hidden")
,Element.classList.remove("hidden")
.Если хочется, чтобы страница, когда уже открыта, в назначенное время на глазах изумлённого посетителя вдруг переключилась, можно по setInterval() каждые 5 секунд, например, смотреть на часы и добавлять/убирать класс как требуется.