JSON.parse(str)
и получить массивindexOf(valueToDelete)
splice()
этот элементJSON.stringify(arr)
setItem(key, value)
let quantity = 1; // изначально 1
// цены в тыс. для числа-индекса (считается от 0: 0, 1, 2, ... 9)
const prices = [0, 250, 245, 240, 238, 235, 230, 225, 220, 215]; // 1..9
// клик на плюс
plus.addEventListener('click', (e) => {
e.preventDefault();
fixPrice(+1);
});
// клик на минус
minus.addEventListener('click', (e) => {
e.preventDefault();
fixPrice(-1);
});
// пересчет цены
const fixPrice = (delta) => {
// обновить количество
quantity += delta; // +/- 1
quantity = Math.max(1, quantity); // не меньше 1
quantity = Math.min(9, quantity); // не больше 9
// показать новые значения
person.value = quantity; // показать новое число персон
price.textContent = `${prices[quantity]} 000 ₸`; // показать цену
}
const crazyJoin = (a, b) => Object.values(b)
.reduce((acc, c) => !!~acc.indexOf(c) ? acc : (acc.push(c), acc), Object.values(a))
.reduce((acc, c, i) => (acc[i] = c, acc), {});
crazyJoin(a, b) // {"0":1,"1":2,"2":3,"3":4,"4":5}
const getSome = (arr) => arr.filter(() => Math.random() >= 0.5);
function noRepeats(str) {
const length = str.length;
let result;
search:
for (let i = 2; i < length; i++) {
if (length % i) continue;
const slen = length / i;
const sample = str.substr(0, slen);
for (let j = 1; j < i; j++) {
if (sample !== str.substr(j * slen, slen))
continue search;
}
result = sample;
}
return result.length ? result : str;
}
querySelector()
возвращает только один, первый найденный элемент. А надо все. Это делает querySelectorAll()const links = document.querySelectorAll('.header__link');
window.addEventListener('scroll', function(){
links.forEach((el) => el.classList.toggle('cactive', pageYOffset > 0));
});
elem = false;
– в переменной же лежит элемент, с которым работатьfunc
без скобок. Иначе слушать будет результат вызова ф-ииelem.checked == true
– должно быть именно ==
. У вас один знак равенства, он присваивает значение.const elem = document.getElementById('elem');
const btn = document.getElementById('btn');
const p = document.getElementById('p');
btn.addEventListener('click', () => p.innerText = elem.checked ? 'Привет' : 'Пока!');
const event = new Event('added_to_cart');
// слушать это событие
elem.addEventListener('added_to_cart', function (e) { /* ... */ }, false);
// вызвать это событие
elem.dispatchEvent(event);
delete()
для удаления параметра. В итоге из URL получим новую адресную строку без лишнего параметра.const url = new URL(document.location);
const searchParams = url.searchParams;
searchParams.delete("test"); // удалить параметр "test"
window.history.pushState({}, '', url.toString());
Article.bind, .call, .length
– небольшой список зарезервированных свойств.function addLocalProperty(value) {
let property = value;
return function() {
property++;
console.log(property);
}
}
const fn = addLocalProperty(0);
fn(); // 1
fn(); // 2