const siblings = Array.prototype.filter.call(
this.parentNode.children,
n => n !== this
);const siblings = [];
for (let el = this; (el = el.previousElementSibling); siblings.unshift(el)) ;
for (let el = this; (el = el.nextElementSibling); siblings.push(el)) ;
$('.openFormPopup').click(e => $('#btn-clicked').val(e.target.dataset.title));
const asyncForEach = (data, callback) =>
Array.prototype.reduce.call(
data,
(promise, n, i, a) => promise.then(() => callback(n, i, a)),
Promise.resolve()
).then(() => {});
// или
async function asyncForEach(data, callback) {
for (const [ i, n ] of data.entries()) {
await callback(n, i, data);
}
}asyncForEach(
document.querySelectorAll('li'),
li => new Promise(r => setTimeout(() => r(console.log(li.textContent)), 1000))
);
Здесь только регуляркой или как?
function incrementNumberInString(str) {
for (let i = 0, iNum = -1; i < str.length; i++) {
if ('0123456789'.includes(str[i])) {
if (iNum === -1 && str[i - 1] === '[') {
iNum = i;
}
} else if (iNum !== -1 && str[i] === ']') {
return str.slice(0, iNum) + (Number(str.slice(iNum, i)) + 1) + str.slice(i);
} else {
iNum = -1;
}
}
return str;
}str.replace(/(?<=\[)\d+(?=\])/, m => ++m)
// или
str.replace(/\[\d+\]/, m => '[' + (m.slice(1, -1) - -1) + ']')
// или
str.replace(/\[(\d+)\]/, (m, g1) => `[${-~g1}]`)
const newArr = [];
for (const n of arr) {
const [ us, s ] = n.us.split('-').map(n => n.split('_').map(Number));
newArr.push({
...n,
us: arr1.filter(n => us.includes(n)),
s,
});
}const newArr = arr.map(function(n) {
const us = n.us.match(/\d+/g).map(n => +n);
const s = us.splice(-1);
return {
id: n.id,
us: this(us),
s,
};
}, us => arr1.filter(Set.prototype.has.bind(new Set(us))));
const getFreeDomainsCount = arr => arr
.map(n => n.split('@')[1])
.filter(n => freeEmailDomains.includes(n))
.reduce((acc, n) => (++acc[n], acc), Object.fromEntries(freeEmailDomains.map(n => [ n, 0 ])));
const obj = arr.find(n => n.id === newObj.id);
if (obj) {
Object.assign(obj, newObj);
} else {
arr.push(newObj);
}
.hidden {
transform: scale(0);
}.item {
transition: transform 0.5s;
}document.querySelectorAll('.item').forEach(n => n.classList.remove('hidden'));
const groupedArr2 = arr2.reduce((acc, n) => {
(acc[n.parent_id] = acc[n.parent_id] || []).push(n);
return acc;
}, {});arr1.forEach(n => n.arr2 = groupedArr2[n.id] || []);const newArr1 = arr1.map(n => ({ ...n, arr2: groupedArr2[n.id] || [] }));
$('.modification').on('change', function() {
const sum = $('[type="radio"]:checked', this)
.siblings('.radio__text')
.get()
.reduce((acc, n) => acc + +$(n).text(), 0);
$('p span').text(sum);
}).trigger('change');const container = document.querySelector('.modification');
container.addEventListener('change', e => {
const sum = Array.prototype.reduce.call(
e.currentTarget.querySelectorAll('[type="radio"]:checked'),
(acc, n) => acc + +n.closest('.radio').querySelector('.radio__text').innerText,
0
);
document.querySelector('p span').innerText = sum;
});
container.dispatchEvent(new Event('change'));
event.target. Надо только (так как обработчик делегированный) убедиться, что событие случилось действительно на одном из интересующих вас элементов (раз это textarea, то, например, путём проверки свойства tagName у целевого элемента).
val умеет принимать в качестве параметра не только значение, но и функцию, которая принимает текущее значение и должна вернуть новое:$(this).parent().find('input').val((i, v) => v - 1);this.parentNode.querySelector('input').value--;
return a.width - b.width
function duplicateEncode(str) {
const arr = str.toLowerCase().split('');
const count = arr.reduce((acc, n) => (acc[n] = (acc[n] || 0) + 1, acc), {});
return arr.map(n => count[n] > 1 ? ')' : '(').join('');
}function duplicateEncode(str) {
const arr = [...str.toLowerCase()];
const duplicates = arr.reduce((acc, n) => acc.set(n, acc.has(n)), new Map);
return ''.concat(...arr.map(n => '()'[+duplicates.get(n)]));
}const duplicateEncode = str => Object
.values(Object
.values(str.toLowerCase())
.reduce((acc, n, i) => ((acc[n] = acc[n] || []).push(i), acc), {}))
.reduce((acc, n) => (n.forEach(i => acc[i] = ~-n.length ? ')' : '('), acc), [])
.reduce((acc, n) => `${acc}${n}`, '');const duplicateEncode = str =>
Array.prototype.reduce.call(
str.toLowerCase(),
(acc, n, i, a) => acc + (a.indexOf(n) === a.lastIndexOf(n) ? '(' : ')'),
''
);const duplicateEncode = str => str
.toLowerCase()
.replace(/./g, (m, _, s) => String.fromCharCode(40 + (s.split(m).length > 2)));