const url = new URL('https://qna.habr.com/?test=123&frukt=yabloko');
console.log(url.searchParams.get('test'));
const str = 'https://qna.habr.com/?test=123&frukt=yabloko';
const usp = new URLSearchParams(str.replace(/^[^?]*\?/, '')); // или str.split('?').pop()
console.log(usp.get('test'));
[ 5, 8, 10 ].forEach((n, i, a) => $items.slice(a[i - 1], n).wrapAll('<div>'));
const elements = document.querySelectorAll('.wrapper-boxes');
const tag = 'button';
const text = 'click me';
const className = 'xxx';
elements.forEach(n => {
n.after(document.createElement(tag));
n.nextSibling.textContent = text;
n.nextSibling.classList.add(className);
});
for (const { parentNode, nextSibling } of elements) {
const el = document.createElement(tag);
parentNode.insertBefore(el, nextSibling);
el.innerText = text;
el.className = className;
}
for (let i = 0; i < elements.length; i++) {
elements[i].insertAdjacentHTML('afterend', `<${tag} class="${className}">${text}</${tag}>`);
}
(function insert(i, n = elements[i]) {
if (n) {
const el = document.createElement(tag);
el.appendChild(new Text(text));
el.classList.value = className;
n.insertAdjacentElement('afterend', el);
insert(-~i);
}
})(0);
const arr = Object
.entries(obj)
.reduce((acc, [ k, values ]) => (
values.forEach((v, i) => (acc[i] ??= {})[k] = v),
acc
), []);
const keys = Object.keys(obj);
const arr = obj[keys[0]]?.map((_, i) => {
return Object.fromEntries(keys.map(k => [ k, obj[k][i] ]));
}) ?? [];
const duplicates = arr.filter((n, i, a) => a.filter(m => m[0] === n[0]).length > 1);
const duplicates = Object
.values(arr.reduce((acc, n) => ((acc[n[0]] ??= []).push(n), acc), {}))
.flatMap(n => n.length > 1 ? n : []);
const duplicates = Array
.from(arr
.reduce((acc, n) => (acc.get(n[0]).push(n), acc), new Map(arr.map(n => [ n[0], [] ])))
.values())
.reduce((acc, n) => (n.length > 1 && acc.push(...n), acc), []);
const duplicates = arr.filter(function(n) {
return this.get(n[0]);
}, arr.reduce((acc, [ n ]) => acc.set(n, acc.has(n)), new Map));
document.querySelector('.btn--start').addEventListener('click', filterItems);
document.querySelector('select').addEventListener('change', e => e.target.value === 'all' && filterItems());
function filterItems() {
const val = document.querySelector('select').value;
document.querySelectorAll('.item').forEach(n => {
n.style.display = [ n.dataset.elem, 'all' ].includes(val)
? 'block'
: 'none';
});
}
Object.fromEntries(new URLSearchParams(arr.join('&')))
arr.reduce((acc, n) => (
n = n.split('='),
acc[n[0]] = n[1],
acc
), {})
Object.assign(...arr.map(n => n.match(/[^=]+/g)).map(([ k, v ]) => ({ [k]: v })))
eval(`({${arr.map(n => `"${n.replace('=', '":"')}"`)}})`)
<div data-value="69"></div>
<div data-value="187"></div>
<div data-value="666"></div>
function animateValue(elem) {
return new Promise(resolve => {
const endValue = +elem.dataset.value;
let currValue = 0;
const interval = setInterval(() => {
if (++currValue === endValue) {
clearInterval(interval);
resolve();
}
elem.innerText = currValue;
}, 20);
});
}
Array
.from(document.querySelectorAll('[data-value]'))
.reduce((p, c) => p.then(() => animateValue(c)), Promise.resolve());
const result = arr.reduce((acc, n, i) => (
(i & 1) || acc.push(0),
acc[~-acc.length] += n,
acc
), []);
function chunked(data, chunkSize) {
return Array.prototype.reduce.call(
data,
(acc, n, i) => ((acc[i / chunkSize | 0] ??= []).push(n), acc),
[]
);
}
function sum(data, val = n => n) {
const getVal = val instanceof Function ? val : n => n[val];
return Array.prototype.reduce.call(
data,
(acc, n) => acc + getVal(n),
0
);
}
const result = chunked(arr, 2).map(n => sum(n));
.active {
&::after {
content: "hello, world!!";
}
}
<a class="tabs-select__button" data-text="hello, world!!">
<a class="tabs-select__button" data-text="fuck the world">
.active {
&::after {
content: attr(data-text);
}
}
const flatArr = arr.flatMap(n => Array.isArray(n.DOP) ? n.DOP : []);
// или
const flatArr = Array.prototype.concat.apply([], arr.map(n => n.DOP ?? []));
// или
const flatArr = arr.reduce((acc, n) => (n.DOP && acc.push(...n.DOP), acc), []);
const unique = Object.values(Object.fromEntries(flatArr.map(n => [ n.NAME, n ])));
// или
const unique = flatArr.filter(function({ NAME: n }) {
return !(this[n] = this.hasOwnProperty(n));
}, {});
// или
const unique = flatArr.filter((n, i, a) => n === a.find(m => m.NAME === n.NAME));
function formatDate(str) {
const d = new Date(str.replace('_', ' 1, '));
d.setMonth(d.getMonth() - 1);
return d.toLocaleDateString('en-US', {
month: 'short',
year: 'numeric',
}).replace(' ', '_');
}
formatDate('Feb_2021') // "Jan_2021"
formatDate('Jan_2000') // "Dec_1999"
g
на самом деле отсутствует. Смотрите внимательнее, куда вы его попытались вписать. str.match(/(?<=\. ).+(?= \(%\))/)[0]
// или
str.replace(/^.*?\. | \(%\).*$/g, '')
// или
str.split('. ').pop().split(' (%)').shift()
this.getRandomZ() не вычисляется
const getRandomPolynom = () => {
const [ A, B, C, D ] = Array.from({ length: 4 }, this.getRandomZ);
return x => A * x ** 4 + B * x ** 3 - C * x ** 2 - D * x + 10;
};
const wrapper = document.querySelector('.wrap');
const html = '<div class="item active">5</div>';
const last = wrapper.lastElementChild;
// или
const last = wrapper.querySelector(':scope > :last-child');
// или
const last = wrapper.children[wrapper.children.length - 1];
// или
const [ last ] = Array.prototype.slice.call(wrapper.children, -1);
last.insertAdjacentHTML('beforebegin', html);
// или
last.before(...new DOMParser().parseFromString(html, 'text/html').body.childNodes);
// или
wrapper.insertBefore(document.createRange().createContextualFragment(html), last);
// или
last.outerHTML = html + last.outerHTML;
const containerSelector = '.card';
const selectSelector = `${containerSelector} select`;
const dataAttr = 'name';
$(selectSelector).change(function() {
$(this)
.closest(containerSelector)
.find(`[data-${dataAttr}]`)
.hide()
.filter(`[data-${dataAttr}="${this.value}"]`)
.show();
}).val(defaultValueSelected).trigger('change');
// или
const selects = document.querySelectorAll(selectSelector);
const onChange = ({ target: t }) => t
.closest(containerSelector)
.querySelectorAll(`[data-${dataAttr}]`)
.forEach(n => n.style.display = t.value === n.dataset[dataAttr] ? 'block' : 'none');
selects.forEach(n => {
n.value = defaultValueSelected;
n.addEventListener('change', onChange);
n.dispatchEvent(new Event('change'));
});
const result = Object.values(arr.reduce((acc, n) => {
(acc[n.name] ??= ({ ...n, count: 0 })).count++;
return acc;
}, {}));
function uniqueWithCount(data, key, countKey) {
const getKey = key instanceof Function ? key : n => n[key];
const unique = new Map;
for (const n of data) {
const k = getKey(n);
unique.set(k, unique.get(k) ?? { ...n, [countKey]: 0 }).get(k)[countKey]++;
}
return unique;
}
const result = [...uniqueWithCount(arr, 'name', 'count').values()];