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) {
const iter = data[Symbol.iterator]();
for (let chunk = [], n; !n?.done && (n = iter.next());) {
if (!n.done) {
chunk.push(n.value);
}
if (chunk.length === chunkSize || (n.done && chunk.length)) {
yield chunk;
chunk = [];
}
}
}
function sum(data, val = n => n) {
const getVal = val instanceof Function ? val : n => n[val];
let result = 0;
for (const n of data) {
result += getVal(n);
}
return result;
}const result = Array.from(chunked(arr, 2), 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 key = 'name';
const attr = `data-${key}`;
const attrSelector = `[${attr}]`;$(selectSelector).change(function() {
$(this)
.closest(containerSelector)
.find(attrSelector)
.hide()
.filter(`[${attr}="${this.value}"]`)
.show();
}).val(defaultValueSelected).trigger('change');
// или
const selects = document.querySelectorAll(selectSelector);
const onChange = ({ target: t }) => t
.closest(containerSelector)
.querySelectorAll(attrSelector)
.forEach(n => n.style.display = t.value === n.dataset[key] ? '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()];
const table = document.querySelector('тут селектор вашей таблицы');table.querySelectorAll('tbody td:last-child').forEach(
(n, i, { [~-i]: { innerText: prev } = {} }) =>
n.innerText !== prev && (n.innerHTML = `<a href="#">${n.innerText}</a>`)
);
// или
let prev = null;
for (const { rows } of table.tBodies) {
for (const { lastElementChild: n } of rows) {
const curr = n.textContent;
if (curr !== prev) {
const a = document.createElement('a');
a.href = '#';
a.append(...n.childNodes);
n.append(a);
prev = curr;
}
}
}
// создаём новый массив
const newArr = arr.map(({ name, ...n }) => (n.user_name = name, n));
// изменяем существующий:
arr.forEach(n => (n.user_name = n.name, delete n.name));// keys - объект вида { старый_ключ_1: 'новый_ключ_1', старый_ключ_2: 'новый_ключ_2', ... }
const renameKeys = (obj, keys) =>
Object.fromEntries(Object
.entries(obj)
.map(([ k, v ]) => [ keys.hasOwnProperty(k) ? keys[k] : k, v ])
);
const newArr = arr.map(n => renameKeys(n, { name: 'user_name' }));function renameKeys(obj, keys) {
for (const n of Object.entries(keys)) {
if (obj.hasOwnProperty(n[0])) {
obj[n[1]] = obj[n[0]];
delete obj[n[0]];
}
}
}
arr.forEach(n => renameKeys(n, { name: 'user_name' }));
const isSumEven = arr => arr.reduce((p, c) => p ^ c, 1) & 1;
// или
const isSumEven = arr => !(arr.filter(n => n % 2).length % 2);
// или
const isSumEven = arr => Number.isInteger(arr.reduce((acc, n) => acc + n, 0) / 2);
// или
const isSumEven = arr => /[02468]$/.test(eval(arr.join('+')) ?? 0);const result = arr.filter(isSumEven);.
function split(arr, numParts) {
const partSize = arr.length / numParts | 0;
return Array
.from({ length: numParts }, (n, i) => i * partSize)
.map((n, i, a) => arr.slice(n, a[i + 1]));
}function split(arr, numParts) {
const partSize = arr.length / numParts | 0;
const numLooseItems = arr.length % numParts;
return Array.from(
{ length: numParts },
function(_, i) {
return arr.slice(this(i), this(i + 1));
},
i => i * partSize + Math.min(i, numLooseItems)
);
}