const a = { x: 1, y: 2}; // главные свойства
const b = { y: 3, z: 5}; // второй товар для сравнения с главным
const comparison = {
// каждому из свойств A подставляем значения из B или прочерк если нет
...Object.keys(a).reduce((acc, c) => (acc[c] = b[c] ?? '-', acc), {}),
// дописываем поверх свойства B
...b
}
// получилось:
{ x: "-", y: 3, z: 5 }
access_token
.const colorSelect = document.querySelector('.hasCustomSelect[name="features[13]"]');
const plugSelect = document.querySelector('.hasCustomSelect[name="features[12]"]');
const onChange = () => {
const colorValue = colorSelect.value;
const plugValue = plugSelect.value;
if (colorValue === '1' && plugValue === '42') {
console.log('Оба, на', { colorValue, plugValue });
} else {
console.log('Всё не то..', { colorValue, plugValue });
}
};
[colorSelect, plugSelect].forEach(el => el.addEventListener('input', onChange));
querySelector()
поискать нужный тег:const code = `
<li class="search__list-item">
<div class="search__img-wrap">
<img class="search__img search__img_indents" src="search.svg" alt="Иконка">
</div>
<strong>поиск</strong>
текста
</li>
`;
const parser = new DOMParser();
const doc = parser.parseFromString(code, 'text/html');
if (doc.querySelector('strong')) {
console.log('Есть!');
}
storage
умеет хранить только строки текста. Поэтому - sessionStorage.setItem('user', {level: '1'})
+ sessionStorage.setItem('user', JSON.stringify({level: '1'}));
и- console.log(Object.keys(sessionStorage.getItem('user'))
+ console.log(Object.keys(JSON.parse(sessionStorage.getItem('user')))
function func(mixedData) {
const id = mixedData?.target?.id ?? mixedData;
console.log(id);
}
func(123) // 123
func({target: {id: 456}}) // 456
?.
— optional chaining??
— Nullish coalescing operatorresult
накапливает строку, и потом функция её возвращает.let result = '';
// ""
result = `${result}${i}`;
// "1"
// ...
// "1"
result = `${result}${i}`;
// "12"
// ...
// "123"
// "1234"
// "12345"
return result;
Поэтому если присвоить переменной результат выполнения этой функции, получится что-то типа:let digits = joinNumbersFromRange(0, 9);
// в переменной digits теперь "0123456789"
active
,start
до finish
. start
и домножать, начиная со следующего start + 1
:const multiplyNumbersInRange = (start, finish) => {
let result = start;
let i = start + 1;
while (i <= finish) {
result *= i;
i += 1;
}
return result;
};
multiplyNumbersInRange(1, 3); // 1 * 2 * 3 = 6
start === finish
) function getValue() {
return new Promise(resolve => setTimeout(() => resolve(123), 2000))
.then(data => data * 2);
}
Как вы получите значение 246 из этой функции «в переменную»?const categories = {
mass: 'Масса',
distance: 'Расстояние',
temperature: 'Температура',
time: 'Время',
speed: 'Скорость',
currency: 'Валюта',
};
const categories = {
mass: { title: 'Масса', element: null, data: null, },
distance: { title: 'Расстояние', element: null, data: null, },
temperature: { title: 'Температура', element: null, data: null, },
time: { title: 'Время', element: null, data: null, },
speed: { title: 'Скорость', element: null, data: null, },
currency: { title: 'Валюта', element: null, data: null, },
};
mass
у вас.Object.entries(categories).forEach(([ name, item ]) => {
const el = document.createElement('div'); // это внешний div кнопки
// el.classList.add(...)
el.insertAdjacentHTML('beforeend', `
<p class="value-item__title">${item.title}</p>
<img src="assets/img/values/${name}.svg" alt="" class="svg-icon value-item__img">
`);
el.addEventListener('click', () => clickHandler(name));
// по этому name можно вытащить categories[name]
divValues.appendChild(el);
});