const sortDigits = num => +[...`${num}`].sort((a, b) => b - a).join('');
const sortDigits = num => ''.concat.apply('', num.toString().split('').sort().reverse()) - 0;
const sortDigits = num => Number(Array
.from('' + num)
.reduce((acc, n) => (acc[n]++, acc), Array(10).fill(0))
.reduceRight((acc, n, i) => acc + String(i).repeat(n), '')
);
const sortDigits = num => Array
.prototype
.reduce
.call(String(num), (acc, n) => ((acc[9 - n] ??= []).push(n | 0), acc), [])
.flat()
.reduce((acc, n) => acc * 10 + n, 0);
const [ zero, one, two, three, four, five, six, seven, eight, nine ] = Array.from(
{ length: 10 },
(_, i) => f => f instanceof Function ? f(i) : i
// или
// (_, i) => f => f?.(i) ?? i
);
const plus = a => b => b + a;
const minus = a => b => b - a;
const times = a => b => b * a;
const dividedBy = a => b => b / a | 0;
Array.from(el.classList).forEach(n => el.classList.toggle(n, !!n.indexOf('modal--')));
el.classList.remove(...[...el.classList].filter(n => n.startsWith('modal--')));
for (let i = el.classList.length; i--; ) {
if (el.classList[i].search('modal--') === 0) {
el.classList.remove(el.classList[i]);
}
}
el.className = el.className.split(' ').filter(n => !/^modal--/.test(n)).join(' ');
el.className = el.className.replace(/(^| )modal--\S*/g, '').trim();
const statsMeta = [
{ title: 'отредактированные', count: item => +item.edited },
{ title: 'неотредактированные', count: item => +!item.edited },
{ title: 'всего', count: () => 1 },
];
const statsData = allMessages.reduce((acc, n) => (
statsMeta.forEach((m, i) => acc[i] += m.count(n)),
acc
), Array(statsMeta.length).fill(0));
console.log(statsMeta.map((n, i) => `${n.title}: ${statsData[i]}`).join('\n'));
const result = arr2.map(function(n) {
return Object.fromEntries(this.map(m => [ m[1], n[m[0]] ]));
}, arr1.flatMap(Object.entries));
const keys = Object.entries(Object.assign({}, ...arr1));
const result = arr2.map(n => keys.reduce((acc, m) => (acc[m[1]] = n[m[0]], acc), {}));
<style>
input + label {
color: #ff0000;
}
</style>
<input type="checkbox" id="checkbox" />
<label for="checkbox">чекбокс</label>
<style>
label > input {
outline-color: #ff0000;
outline-style: double;
}
</style>
<label>
<input type="checkbox" />
чекбокс
</label>
arr.map(item => Object.fromEntries([item]))
const resultArr = [];
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
const obj = {};
obj[item[0]] = item[1];
resultArr.push(obj);
}
const resultArr = [];
for (let [prop, value] of arr) {
const obj = { [prop]: value };
resultArr.push(obj);
}
const form = document.querySelector('form');
form.addEventListener('change', () => {
form.querySelector('.result').innerText = Array
.from(form.querySelectorAll(':checked'))
.reduce((acc, n) => acc + +n.getAttribute('rel'), 0);
});
form.dispatchEvent(new Event('change'));
const blockSelector = 'селектор блоков';
const buttonSelector = 'селектор кнопок';
const activeClass = 'класс, показывающий блок';
const blocks = document.querySelectorAll(blockSelector);
const buttons = document.querySelectorAll(buttonSelector);
buttons.forEach((n, i) => {
n.addEventListener('click', () => {
blocks[i].classList.toggle(activeClass);
});
});
const onClick = function({ currentTarget: { dataset: { index } } }) {
this[index].classList.toggle(activeClass);
}.bind(document.querySelectorAll(blockSelector));
document.querySelectorAll(buttonSelector).forEach((n, i) => {
n.dataset.index = i;
n.addEventListener('click', onClick);
});
const blocks = document.querySelectorAll(blockSelector);
const buttons = document.querySelectorAll(buttonSelector);
buttons.forEach(n => n.addEventListener('click', onClick));
function onClick() {
const index = Array.prototype.indexOf.call(buttons, this);
blocks[index].classList.toggle(activeClass);
}
const containerSelector = '...';
), то индексы не нужны. Достаточно от нажатой кнопки подняться до общего предка кнопки и блока, и найти внутри блок (а можно даже и не искать, если добавлять класс контейнеру; конечно, стили придётся в этом случае немного изменить, вместо .блок.класс
будет .контейнер.класс .блок
):const toggleBlock = button => button
?.closest(containerSelector)
?.querySelector(blockSelector)
.classList
.toggle(activeClass);
// можно добавить обработчик клика каждой кнопке индивидуально
document.querySelectorAll(buttonSelector).forEach(function(n) {
n.addEventListener('click', this);
}, e => toggleBlock(e.currentTarget));
// или один раз на всю страницу
document.addEventListener('click', e => {
toggleBlock(e.target.closest(buttonSelector));
});
const number = new URLSearchParams(link).get("TicketNumber");
TicketNumber=(\d+)
const groupedAndSortedArr = Object
.values(arr.reduce((acc, n) => ((acc[n[0]] ??= []).push(n), acc), {}))
.sort((a, b) => a[0][0].localeCompare(b[0][0]));