str.match(/\w+$/)[0]
str.split(/\W/).pop()
str.replace(/.*\W/, '')
-1
, с единицей это 0
, т.е., начало строки) и до конца:str.slice(1 + Math.max(...[...'@/'].map(n => str.lastIndexOf(n))))
[...str].reduce((acc, n) => '@/'.includes(n) ? '' : acc + n, '')
const closeInfoWindows = (...windows) => windows.forEach(w => w && w.close());
[object Object]
.$('<table class="table fixedheader footable">').html(clone)
<p data-letter="2">П</p>
<p data-letter="0">Ж</p>
<p data-letter="3">А</p>
<p data-letter="1">О</p>
const word = $('[data-letter]')
.sort((a, b) => $(a).data('letter') - $(b).data('letter'))
.text();
// или
const word = Array
.from(document.querySelectorAll('[data-letter]'))
.reduce((acc, n) => (acc[n.dataset.letter] = n.innerText, acc), [])
.join('');
onChange([ date ]) {
endDate.set('minDate', +date + 1000 * 60 * 60 * 24 * 14);
},
orderlist
проверяйте orderlist[0][0]
. Если заранее не знаете - сделайте метод, который проверит всё:const inArray = (arr, val) =>
arr.some(n => Array.isArray(n) ? inArray(n, val) : Object.is(n, val));
// или
const inArray = (arr, val) =>
arr.flat(Infinity).includes(val);
строка = floor(индекс / количество столбцов)
столбец = индекс % количество столбцов
const result = Object.values(arr.reduce((acc, n) => {
const group = acc[n.id] = acc[n.id] || { id: n.id, offers: [] };
group.offers.push(n);
return acc;
}, {}));
document.querySelectorAll('.num').forEach(n => n.innerText *= 2);
[ -(2 ** 30), 2 ** 30 )
), то можно и без оператора умножения обойтись:for (const n of document.getElementsByClassName('num')) {
n.textContent <<= 1;
}
function createTree(data) {
const tree = { null: { cat: {} } };
data.forEach(n => tree[n.id] = { cat: {}, ...n });
data.forEach(n => tree[n.parent].cat[n.name] = tree[n.id]);
return tree.null.cat;
}