const getDayName = (day, lang) => (({
en: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
ru: [ 'Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота' ],
})[lang] || [])[day - (7 * Math.floor(day / 7))];
getDayName(5, 'en') // 'Friday'
getDayName(7, 'ru') // 'Воскресенье'
getDayName(-19, 'ru') // 'Вторник'
getDayName(4, 'fr') // undefined
const getDayName = (day, lang) =>
new Date(2001, 0, ((day % 7) + 7) % 7).toLocaleString(lang, { weekday: 'long' });
getDayName(4, 'fr') // 'jeudi'
getDayName(36, 'de') // 'Montag'
// можно посмотреть количество ключей
const isEmpty = x => !Object.keys(x || {}).length;
// или перебирать свойства, пока не встретится собственное
function isEmpty(x) {
for (const k in x) if (x.hasOwnProperty(k)) {
return false;
}
return true;
}
isEmpty() // true
isEmpty(null) // true
isEmpty(666) // true
isEmpty('') // true
isEmpty([]) // true
isEmpty({}) // true
isEmpty([ 187 ]) // false
isEmpty({ xxx: 69 }) // false
isEmpty('hello, world!!') // false
await Promise.all([ one(), query().then(commit) ])
await Promise.all([ one(), query().then(r => (commit(), r)) ])
const data = Array.from(
document.querySelectorAll('.bigDiv'),
n => Array.from(n.querySelectorAll('.smallDiv'), m => m.innerText)
);
const data = [];
for (const n of document.getElementsByClassName('bigDiv')) {
data.push([]);
for (const m of n.children) {
data[data.length - 1].push(m.innerHTML);
}
}
const data = Array.prototype.reduce.call(
document.getElementsByClassName('smallDiv'),
(acc, n) => (
n.previousElementSibling || acc.push([]),
acc[~-acc.length].push(n.textContent),
acc
),
[]
);
.hidden {
display: none;
}
const checkbox = document.querySelector('.block50 input');
const block = document.querySelector('.block83');
const onChange = e => block.classList.toggle('hidden', !e.target.checked);
checkbox.addEventListener('change', onChange);
список скрывается только после того, когда поставишь и уберешь галочку
<div class="block83 hidden">
checkbox.dispatchEvent(new Event('change'));
body:not(:has(.block50 :checked)) .block83 {
display: none;
}
document.querySelector('#myselect').addEventListener('change', function(e) {
const select = this;
// или
// const select = e.target;
// const select = e.currentTarget;
const [ option ] = select.selectedOptions;
// или
// const option = select[select.selectedIndex];
// const option = select.querySelector(`[value="${select.value}"]`);
// const option = select.querySelector('option:checked');
// const option = [...select.options].find(n => n.selected);
const forAttr = option.getAttribute('for');
// или
// const forAttr = option.attributes.for.value;
document.querySelector('#mydiv').innerText = `Вес брутто*: ${forAttr}`;
});
Promise
.all([...img].map(n => new Promise(r => n.complete ? r() : n.onload = r)))
.then(() => img.forEach(n => n.style.position = 'absolute'));
const intervals = [ 1000, 2000, 500, 3000 ];
let interval = -1;
function newsRotator() {
const $news = $('.news');
const $hidden = $news.not(':visible');
const $next = $hidden.eq(Math.random() * $hidden.length | 0);
$news.hide();
$next.show();
interval = (interval + 1) % intervals.length;
setTimeout(newsRotator, intervals[interval]);
}
newsRotator();
for(i = 0
i
должна быть объявлена. Погуглите, что происходит, если выполнить присваивание необъявленной переменной.i<= n;
newArr[i] = a[i];
function arrayNtimes(a, n) {
const newArr = [];
for (let i = 0; i < n * a.length; i++) {
newArr[i] = a[i % a.length];
}
return newArr;
}
const arrayNtimes = (a, n) => Array(n).fill(a).flat();
element.insertAdjacentHTML('beforebegin', html);
element.before(...new DOMParser().parseFromString(html, 'text/html').body.childNodes);
// или
element.parentNode.insertBefore(document.createRange().createContextualFragment(html), element);
element.outerHTML = html + element.outerHTML;
const titleCase = str => str
.toLowerCase()
.split(' ')
.map(n => n[0].toUpperCase() + n.slice(1))
.join(' ');
const titleCase = str => str
.toLowerCase()
.replace(/(?<=^| )./g, m => m.toUpperCase());
const titleCase = str => Array
.from(str, (n, i) => n[i && str[i - 1] !== ' ' ? 'toLowerCase' : 'toUpperCase']())
.join``;
(() => {}) instanceof Object // true
const container = document;
const selector = 'input[type="checkbox"]';
const sumElements = elements =>
Array.prototype.reduce.call(elements, (acc, n) => acc + +n.value, 0);
const onSumChange = sum => console.log(sum);
container.addEventListener('change', function({ target: t }) {
if (t.matches(selector)) {
onSumChange(sumElements(this.querySelectorAll(`${selector}:checked`)));
}
});
container.querySelector(selector).dispatchEvent(new Event('change', { bubbles: true }));
const cb = container.querySelectorAll(selector);
let sum = sumElements(Array.prototype.filter.call(cb, n => n.checked));
const onChange = e => onSumChange(sum += e.target.value * [ -1, 1 ][+e.target.checked]);
cb.forEach(n => n.addEventListener('change', onChange));
onSumChange(sum);
str.slice(1).split('&').reduce((acc, n) => (n = n.split('='), acc[n[0]] = n[1], acc), {})
// или
[...str.matchAll(/(\w+)=([^&]*)/g)].reduce((acc, [ , k, v ]) => ({ ...acc, [k]: v }), {})
// или
Object.fromEntries(new URLSearchParams(str))