`
:$('#bombfire').html(`
<svg>...</svg>
`);
Только в обратных "бэк-тиках" можно текст разбивать на строки. Подробнее про строки и кавычки.const str = ' \
line 1 \
line 2 \
';
i
уже начинает указывать на следующий,for()
увеличит i
ещё на 1, и получится, что 1 элемент пропустили. Чинится уменьшением i
на 1 сразу после удаления 1 элемента.i
должно быть не меньше-или-равно, а меньше, чем длина массива.indexOf(value)
const duplicateArray = ['a', 'b', 'c', 'a', 'b', 'c', 'q'];
function funcDeleteDuplicate(array) {
for (let i = 0; i < array.length; i++) {
if (array.indexOf(array[i]) !== i) {
array.splice(i, 1);
i--;
}
}
return array;
}
console.log(funcDeleteDuplicate(duplicateArray));
// [ "a", "b", "c", "q" ]
const funcDeleteDuplicate = array => [...new Set(array)];
imageClone.onload = imageLoaded;
function nextActions() {
vars();
anim();
slider();
}
// ...
// внутри колбэка imageLoaded:
if (!preloader.classList.contains('done')) {
preloader.classList.add('done');
nextActions(); // запустить следующие анимации
}
tv-symbol-price-quote__value js-symbol-last
там — пустой. Это после обработки в браузере JS, в тот элемент попадает обновляемое значение котировки./**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
backBlock.addEventListener
добавляется внутри обработчика клика. Т.е. каждый раз, как нажимаем на openBlock
, вешается ещё и ещё один обработчик на backBlock
. Достаточно один раз, заранее, так же как сейчас openBlock.addEventListener
openBlock
и backBlock
не меняются, их можно вместо let
объявить const
document.querySelector('.hidden-block')
наверное, не имеет смысла, достаточно один раз, заранее const hiddenBlock = document.querySelector('.hidden-block');
и далее обращаться к этой константе hiddenBlock
.pet_1 = { name: "Шарик", age: 10 };
pet_2 = { name: "Жучка", age: 5 };
function getName() {
return [this.name, this.age].join(' ');
}
pet_1.getName = getName;
pet_2.getName = getName;
pet_1.getName(); // Шарик 10
pet_2.getName(); // Жучка 5
pet_1 = { name: "Шарик", age: 10 };
pet_2 = { name: "Жучка", age: 5 };
function getName() {
return [this.name, this.age].join(' ');
}
const mixin = { getName };
Object.assign(pet_1, mixin);
Object.assign(pet_2, mixin);
pet_1.getName(); // Шарик 10
pet_2.getName(); // Жучка 5
Подготовить объект с единственным свойством "getName" в котором лежит одноимённая функция. Скопировать все свойства (в данном случае одно) этого объекта поверх существующих свойств объектов pet_1
и pet_2
с помощью Object.assign()
.reduce()
в копилку:const zip = (arr1, arr2) => arr1.reduce(
(acc, head, i) => (acc.push({ ...arr2[i], head }), acc),
[]
);
zip(mass1, mass2)
/* [
{ t1: "aa", p1: "lot", head: "zn1" },
{ t1: "ab", p1: "kot", head: "zn2" },
{ t1: "ac", p1: "mot", head: "zn3" },
] */
map()
тут больше подходит:mass1.map((head, i) => ({ head, ...mass2[i] }))
window.isLoaded = false;
window.addEventListener('load', () => {
window.isLoaded = true;
});
window.isQueued = false; // уже ждём в очереди?
function nowOrLater() {
if (!window.isLoaded) {
if (!window.isQueued) {
window.addEventListener('load', nowOrLater);
window.isQueued = true;
}
return;
}
// тут код котовый выполнить только после
}
let isScrollIgnored = false;
const myScroll = () => {
if (isScrollIgnored) return;
// ...
isScrollIgnored = true;
setTimeout(() => isScrollIgnored = false, 500);
someElement.scrollIntoView();
// ...
};
window.addEventListener( 'scroll', myScroll );
isTrusted
у события scroll: может, когда оно вызвано не мышкой, а scrollIntoView(), то становится false
? Тогда: const myScroll = event => {
const { isTrusted } = event;
if (!isTrusted) return;
// ...
- if (walk.length > 10 || walk.length < 10) return false;
+ if (walk.length !== 10) return false;
const isValidWalk = walk => {
if (walk.length !== 10) return false;
const counts = walk.reduce((acc, c) => (acc[c]++, acc), { w: 0, n: 0, e: 0, s: 0 });
return counts.e === counts.w && counts.n === counts.s;
};
const randomArr = () => {
// ...
return arr;
};
const randomArr = () => Array.from({length: 10}, () => (Math.random() * 10) | 0);
// [ 0, 3, 2, 4, 2, 1, 1, 5, 2, 5 ]
Так не исключены повторы значений.[1, 2, ... 10]
и случайно перемешать их:const randomArr = () => {
const arr = Array.from({length: 10}, (_, i) => i + 1); // [1, 2, .. 10]
for (let i = 0; i < 10; i++) {
const j = i + Math.floor(Math.random() * (10 - i));
[arr[i], arr[j]] = [arr[j], arr[i]]; // местами поменять
}
return arr;
}
// [ 6, 7, 9, 3, 1, 8, 10, 2, 4, 5 ]
https://example.com/api/method?NUM=123&STR=abc
null
.value
.- let input = document.getElementsByClassName('form-control');
+ const input = document.querySelector('input.form-control');