if (a == 1 && a == 2)
false
, т.к. не может быть одновременно равно и 1 и 2 (может последовательно), так что смело удаляйте весь блок.а
равно одному из списка», можно так:if ([1, 2, 100500].includes(a))
setTimeout(function () {
var counter = 0;
setTimeout(() => counter++, 1000); // через 1с увеличит на 1
console.log(counter); // выведет 0, сразу
setTimeout(() => {
console.log(counter);
nextselect.addClass('same-as-selected').trigger("click");
}, 1400); // через 1.4с "кликнет"
}, 500); // вообще всё начнётся только через пол-секунды
0 - начало
0.5 - начнёт выполняться внешняя ф-я:
зарядятся два таймера, в промежутке выведет 0
0.5 + 1 - counter увеличится на 1
0.5 + 1.4 - еще раз выведется counter, добавится класс, клик
for (let i = 0; i < 50; ...
0
и < 50
, чтобы это исправить.out += i + ' '; // добавляется всегда, в любом случае
if ( i % 2 != 0) continue; // проверка уже потом
поменяйте порядок: сначала проверка, потом добавлениеdocument.querySelector('.out-2').innerHTML = out;
document.querySelector('.b-2').addEventListener('click', () => {
document.querySelector('.out-2').innerText = Array(25) // создали массив из 25 пустых слотов
.fill() // заполнили их undefined, чтобы можно было..
.map((n, i) => 2 * (i + 1)) // каждый заменить на (его индекс + 1) * 2
.join(' '); // и склеить в строку через пробел
})
все эти методы массива можно посмотреть на MDN.чтобы не раздувать файл, решил вынести общие функции и переменные в отдельный файл
calc_init.js?1
не удачная идея. Именно потому, что возникают описанные в вопросе проблемы.<script src="calc_init.js"></script>
. Пусть там просто определяется единственная function calc_init(n, id) {
let el_script = document.createElement("script");
el_script.src = `/scripts/script_${n}.js`;
el_script.setAttribute('defer', '');
document.body.appendChild(el_script);
let el_div = document.createElement("div");
el_div.setAttribute('id', id);
document.body.appendChild(el_div);
}
calc_init(1, 'id_calc_1'); // номер калькулятора и id HTML-элемента, куда его впихнуть
calc_init(3, 'id_calc_3');
clearText()
выполнять timer.innerHTML = 0;
setInterval(func, 1000)
идеальной секундной стрелкой.const D = new Date();
и по таймеру брать текущее время и считать разницу с тем моментом: let seconds = Math.round((new Date() - D) / 1000)
$('#search').on('input', function(){ // При вводе текста..
$('.table-item.-active').removeClass('-active'); // убираем класс .-active у .block.-active
const ids = $(this).val().split(/[ ,]/).filter(el => el.length);
for (let id of ids) {
$(`.table-item[id="${id}"]`) // берём блок у которого есть совпадение по id
.addClass('-active'); // выдаём ему класс .-active
}
});
// эта функция - Генератор. Он создаёт итерируемые штуки
function* makeRangeIterator(start = 0, end = 100, step = 1) {
let iterationCount = 0;
for (let i = start; i < end; i += step) {
iterationCount++;
yield i;
}
return iterationCount;
}
// вот сделаем итератор от 1 и до 10 (исключая конец)
var r1_10 = makeRangeIterator(1, 10);
// в цикле получим из итератора значения
for (i of r1_10) {
console.log(i); // выведет от 1 до 9
}
/[ ,.]/
— будет соответствовать пробелу или запятой или точке."test one."
получится ["test", "one", ""]
Поэтому стоит пройтись по массиву, оставив в нём только строки ненулевой длины: arr.filter(w => w.length > 0)
requestAnimationFrame()
– зависит от устройства, активности/неактивности вкладки и др.includes()
и indexOf()
каждый раз, считайте, пробегают, в среднем, по полстроки.a..z
function scramble(str1, str2) {
if (str1.length < str2.length) return false;
const a = Array(26).fill(0);
for (let c of str1) a[c.charCodeAt(0) - 97]++;
for (let c of str2) a[c.charCodeAt(0) - 97]--;
for (let n of a) if (n < 0) return false;
return true;
}
* 97 это ASCII-код маленькой латинской "a"// every 100ms examine the socket and send more data
// only if all the existing data was sent out
setInterval(() => {
if (socket.bufferedAmount == 0) {
socket.send(moreData());
}
}, 100);
arr.filter(nam(20,50))
// это то же самое:
arr.filter(function (x) { return x >= 20 && x <= 50; })
// или так:
function f(x) {
return x >= 20 && x <= 50;
}
arr.filter(f)
.filter(f)
применит функцию f
по очереди к каждому элементу массива. Т.е. вызовет функцию f(10), f(20), ... f(70)
f(элемент)
вернул true
.