Как определить, что ... один из квадратов уже зеленый?
el.style.background
, а добавлением класса .green
, то достаточно было бы выбрать elem.querySelectorAll('.green');
green
только кликнутому квадрату..green {
background-color: green !important;
}
json.data
– массив объектов. Массив хочется свести к единственному значению (сумме) — значит, нужен reduce().then(json => {
// сумма полей price
const sum = json.data.reduce((acc, c) => acc + c.price, 0);
// ...
По-хорошему надо ещё проверять. что валюта у всех товаров одинакова ) let str = 'D:\number\folder';
"\n"
(новая строка) и "\f"
ещё какой-то спецсивол. Просто выведите str
без изменений, чтобы убедиться.let str = 'D:\\number\\folder';
let str = path.join('D:', 'number', 'folder');
const KEY = 'myLSkey';
const ymd = date =>
new Date(date.setTime(date.getTime() - date.getTimezoneOffset() * 6e4))
.toISOString()
.substring(0, 10);
const today = ymd(new Date()); // '2022-06-23'
const data = {
date: today,
count: 1,
...JSON.parse(localStorage.getItem(KEY)),
};
if (data.date !== today) {
data.date = today;
data.count++;
}
localStorage.setItem(KEY, JSON.stringify(data));
/
регулярным выражением/
\s
, включая перенос строки, +
' '
:const name = "str 1\nstr 2";
console.log(name);
// str 1
// str 2
console.log( name.replace(/\s+/g, ' ') );
// "str 1 str 2"
ключ g
("global") после выражения – чтобы заменить не единственный первый встречный раз, а "глобально", во всём предоставленном тексте. setTimeout()
— сначала зарядится таймер, отработает: отресолвит промис, и после этого уже сработает финальный console.log()
async function monitor() {
await new Promise(resolve => {
setTimeout(() => {
console.log("Прошла секунда");
resolve();
}, 1000);
});
console.log("После Вас!")
}
monitor();
[...defaultDepts]
создаёт новый массив старых объектов. Меняете что-то внутри этих объектов — меняется и внутри defaultDepts.[...this.defaultDepartments].map(item => {...item})
, а нормальная рекурсивная. Ведь ещё и свойство colleagues
, с свою очередь, содержит массив объектов. document.addEventListener('click', event => {
const { target } = event;
if (target.tagName !== 'DIV'
|| !target.classList.contains('elem')) {
return;
}
console.log(target.dataset.name);
});
const blockRelocate = () => {
const elSource = document.querySelector('.description-wrapper');
if (!elSource) {
return setTimeout(blockRelocate, 150);
}
const elTarget = document.querySelector('.item-calculator_container');
elTarget.insertAdjacentElement('beforebegin', elSource);
}
blockRelocate();
Set
удобен, например, когда нужно оставить из набора данных только уникальные.const data = [ 1, 2, 2, 3, 3, 3 ];
const unique = [...new Set(data)];
unique // [ 1, 2, 3 ]
Map
хорош тем, что ключами в нём могут быть и объекты. Например, HTML-элементы, для которых захочется хранить какие-то данные. И Map запоминает порядок добавления элементов, что может быть полезно при переборе. let value = { name: 'iOne' };
let x = value; // ещё одна "ссылка" на объект
value = null; // или delete value; – то же самое
x // { name: "iOne" }
Разберитесь с основами: Объекты и ссылки на объекты. Т.к. в объекте weakMap есть ссылка от ключа на объект-значение — объект вполне себе сохраняется. Главное, что всё ещё жива ссылка на объект-ключ key
.const weakMap = new WeakMap();
let value = {name: 'Ivan'};
let key = {};
// добавление нового элемента
weakMap.set(key, value);
// обнуление
delete key;
Теперь, хоть объект, на который указывала переменная key
всё ещё используется в качестве ключа в WeakMap, сборщик мусора, при срабатывании, таки удалит его.