(str.match(/[0-9]+/g) ?? []).map(Number)
// или
Array.from(str.matchAll(/\d+/g), n => +n)
// или
str.split(/\D+/).filter(Boolean).map(parseFloat)
// или
eval(`[${str.replace(/\D+/g, (m, i) => i ? ',' : '')}]`)
// или
[...str].reduce((acc, n, i, a) => (
isNaN(n) || (isNaN(a[i - 1]) && acc.push(0), acc.push(n - 0 + acc.pop() * 10)),
acc
), [])
ищет метод toString - его нет
test.toString
, то результатом будет undefined
. Вы проверьте, так ли это. Будете удивлены. const tables = document.querySelectorAll('селектор таблиц');
for (const table of tables) {
const labels = Array.prototype.map.call(
table.querySelectorAll('thead th'),
th => th.innerText
);
for (const tbody of table.tBodies) {
for (const tr of tbody.rows) {
for (let i = 0; i < tr.cells.length; i++) {
tr.cells[i].setAttribute('data-label', labels[i]);
}
}
}
}
// или
tables.forEach(table => {
table.querySelectorAll('tbody td').forEach(function(td) {
td.dataset.label = this[td.cellIndex];
}, Array.from(table.tHead.rows[0].cells, th => th.textContent));
});
const result = data
.flatMap(n => n.values)
.filter(n => n.Ids.some(m => arr.includes(m)))
.map(({ id, title }) => ({ id, title }));
const diff = (arr1, arr2, key = n => n) =>
arr1.filter(function(n) {
return !this.has(key(n));
}, new Set(arr2.map(key)));
const result = diff(allCass, defaultCass, n => n.id);
Пытался сделать через reduce из библиотеки lodash
const newArr = _.map(_.groupBy(arr, 'merch'), (v, k) => ({
merch: +k,
games: _.uniq(_.flatMap(v, 'games')),
}));
const newArr = Object
.entries(arr.reduce((acc, n) => ((acc[n.merch] ??= []).push(...n.games), acc), {}))
.map(n => ({ merch: +n[0], games: [...new Set(n[1])] }));
selects[0].appendChild(option) selects[1].appendChild(option)
Если данный дочерний элемент является ссылкой на существующий узел в документе, то функция appendChild()
перемещает его из текущей позиции в новую позицию
selects[1].appendChild(option.cloneNode(true))
const optionsHTML = Object
.entries(metrics.convertRules)
.map(n => `<option value="${n[0]}">${n[1].label}</option>`)
.join('');
selects.forEach(n => n.innerHTML = optionsHTML);
document.addEventListener('input', e => {
if (e.target.classList.contains('form-control')) {
const form = e.target.closest('селектор формы');
form.querySelector('span').innerText = Array
.from(form.querySelectorAll('input.form-control'))
.reduce((acc, n) => acc * (+n.value || 0), 1);
}
});
arr.reduce((acc, n) => (
n = n.match(/(\w+) = (.*)/),
n && (acc[n[1]] = n[2]),
acc
), {})
const sum = elements =>
Array.prototype.reduce.call(
elements,
(acc, n) => acc + (+n.value || 0),
0
);
const $form = $('form').on('change', 'select', () => {
$('input').val(sum($form.find('select')));
});
const input = document.querySelector('input');
const selects = document.querySelectorAll('form select');
const onChange = () => input.value = sum(selects);
selects.forEach(n => n.addEventListener('change', onChange));
document.querySelector('form').addEventListener('change', function(e) {
if (e.target.tagName === 'SELECT') {
document.querySelector('input').value = sum(this.getElementsByTagName('select'));
}
});
let checked = null;
$('input').click(function() {
checked = checked === this.value ? null : this.value;
this.checked = !!checked;
});
// или
document.querySelectorAll('input').forEach(function(n) {
n.addEventListener('click', this);
}, function({ target: t }) {
t.checked = !!(this[0] = this[0] === t ? null : t);
}.bind([]));
const $checkboxes = $('input').change(function() {
if (this.checked) {
$checkboxes.not(this).prop('checked', false);
}
});
// или
const checkboxes = document.querySelectorAll('input');
const onChange = e => checkboxes.forEach(n => n.checked &&= n === e.target);
checkboxes.forEach(n => n.addEventListener('change', onChange));
const sum5 = (...args) =>
args.length > 4
? args.slice(0, 5).reduce((acc, n) => acc + n, 0)
: sum5.bind(null, ...args);
// или
// : (...args2) => sum5(...args, ...args2);
const selects = [...document.querySelectorAll('select')];
const onChange = () =>
selects.forEach(function({ value, options: [...n] }) {
n.forEach(m => m.hidden = this.includes(m.value) && value !== m.value);
}, selects.map(n => n.value));
selects.forEach(n => n.addEventListener('change', onChange));
const weights = {
j: 11,
q: 12,
k: 13,
a: 14,
};
const isStraight = hand => hand
.map(n => weights[n] ?? +n)
.sort((a, b) => a - b)
.every((n, i, a) => !i || (n - a[i - 1] === 1));
чекбокс.addEventListener('change', e => кнопка.disabled = !e.target.checked);
$('.elem_block').on('click', '.dell', function() {
$(this).closest('.block').addClass('fx_none');
$('.no-res').toggleClass('fx_none', !!$('.block:not(.fx_none)').length);
});
document.addEventListener('click', e => {
const btn = e.target.closest('.dell');
if (btn) {
btn.closest('.block').classList.add('fx_none');
document.querySelector('.no-res').classList.toggle(
'fx_none',
!!document.querySelector('.block:not(.fx_none)')
);
}
});
const controls = document.querySelectorAll('.segmented-control');
controls.forEach(n => n.addEventListener('change', updatePillPosition));
window.addEventListener('resize', () => controls.forEach(n => updatePillPosition.call(n)));
function updatePillPosition() {
const inputs = [...this.querySelectorAll('.option input')];
const x = this.offsetWidth / inputs.length * inputs.findIndex(n => n.checked);
this.querySelector('.selection').style.transform = `translateX(${x}px)`;
}