const entries = Object.entries(obj); for (const entry of entries) { if (!isObject(entry)) { result = Object.assign(result, Object.fromEntries(entry)); } else return cloneDeep(entry);
const merge = (...arrs) =>
Array.from(
{ length: Math.max(...arrs.map(n => n.length)) },
(_, i) => Object.assign({}, ...arrs.map(n => n[i]))
);
const arr = merge(arr1, arr2);
const merge = (...arrs) =>
arrs.reduce((acc, n) => (
n.forEach((m, i) => Object.assign(acc[i] ??= {}, m)),
acc
), []);
function replaceText(node, replacer) {
if (node.nodeType === Node.ELEMENT_NODE) {
node.childNodes.forEach(n => replaceText(n, replacer));
} else if (node.nodeType === Node.TEXT_NODE) {
node.nodeValue = replacer(node.nodeValue);
}
}
replaceText(document.body, str => str.replace(/\d/g, 'hello, world!!'));
function replaceText(node, replacer) {
const iter = document.createNodeIterator(node, NodeFilter.SHOW_TEXT);
for (let node = null; node = iter.nextNode(); ) {
node.nodeValue = replacer(node.nodeValue);
}
}
document.querySelector('.ticket_content').addEventListener('input', e => {
document.querySelector('.ticket_price').innerText = Array
.from(
e.currentTarget.querySelectorAll('.plus_minus'),
n => n.querySelector('input').value * n.nextElementSibling.innerText
)
.reduce((acc, n) => acc + n, 0);
});
document.querySelectorAll('.item').forEach((n, i) => {
n.querySelectorAll('.card-item').forEach(m => m.innerText = `xxx-${i}`);
});
const bullshitInsert = str => str
.replace(/(?<=[2468])(?=[2468])/g, '*')
.replace(/(?<=[13579])(?=[13579])/g, '-');
const bullshitInsert = str => Array
.from(str, (n, i) => (n * str[i - 1] && !((n ^ str[i - 1]) & 1) ? '*-'[n & 1] : '') + n)
.join('');
Object.fromEntries(Object
.entries(arr.reduce((acc, n) => ((acc[n.name] ??= []).push(n.value), acc), {}))
.map(n => [ n[0], n[1].length === 1 || n[1] ])
)
const filter = (arr, conditions) =>
arr.filter(function(item) {
return this.every(([ k, v ]) => (Array.isArray(v) ? v : [ v ]).some(n => n.includes(item[k])));
}, Object.entries(conditions));
А лучше всего просто объяснить что бы я в итоге допер сам!
const { drawImage } = canvas.getContext('2d') as CanvasRenderingContext2D; drawImage( ...
const obj = {
fucking_value: 666,
fucking_method() {
if (!this.hasOwnProperty('fucking_value')) {
throw 'FUCK OFF';
}
console.log(this.fucking_value);
},
};
const { fucking_method } = obj;
fucking_method();
this
- бегом гуглить, разбираться, что это, зачем, к каким значениям в каких случаях даёт доступ.document.querySelector('.form').addEventListener('input', e => {
const data = Array.from(
e.currentTarget.children,
n => Array.from(n.querySelectorAll('input'), m => m.value)
);
document.querySelector('.total').innerText = Array
.from(document.querySelectorAll('.row'))
.reduce((acc, n, i) => {
data[i].forEach((m, j) => n.children[j + 1].innerText = m);
return acc + (data[i].at(-1) | 0);
}, 0);
});
const flat = (arr, childrenKey) =>
arr instanceof Array
? arr.flatMap(({ [childrenKey]: c, ...n }) => [ n, ...flat(c, childrenKey) ])
: [];
const result = flat(items, 'children');
function flat(arr, childrenKey) {
const result = [];
for (const stack = [...arr].reverse(); stack.length; ) {
const { [childrenKey]: c, ...n } = stack.pop();
if (Array.isArray(c) && c.length) {
stack.push(...[...c].reverse());
}
result.push(n);
}
return result;
}
// или
function flat(arr, childrenKey) {
const result = [];
const stack = [];
for (let i = 0; i < arr.length || stack.length; i++) {
if (i === arr.length) {
[ i, arr ] = stack.pop();
} else {
const { [childrenKey]: c, ...n } = arr[i];
if (Array.isArray(c) && c.length) {
stack.push([ i, arr ]);
[ i, arr ] = [ -1, c ];
}
result.push(n);
}
}
return result;
}
const obj = new Proxy({}, {
get(target, key) {
const lowerKey = key.toLowerCase();
return target[Object.hasOwn(target, lowerKey) ? lowerKey : key];
},
set(target, key, val) {
target[key.toLowerCase()] = val;
return true;
},
has(target, key) {
return key in target || key.toLowerCase() in target;
},
defineProperty(target, key, descriptor) {
return Object.defineProperty(target, key.toLowerCase(), descriptor);
},
deleteProperty(target, key) {
return delete target[key.toLowerCase()];
},
getOwnPropertyDescriptor(target, key) {
return Object.getOwnPropertyDescriptor(target, key.toLowerCase());
},
});
const merge = (key, ...arrs) =>
Object.values(arrs.reduce((acc, arr) => (
arr.forEach(n => Object.assign(acc[n[key]] ??= {}, n)),
acc
), {}));
const result = merge('id', sum, arr1, arr2);
const merge = (key, ...arrs) =>
Array.from(arrs
.flat()
.reduce((acc, n) => {
const k = key(n);
return acc.set(k, Object.assign(acc.get(k) ?? {}, n));
}, new Map)
.values()
);
const result = merge(n => n.id, sum, arr1, arr2);
const result = arr.map(function(n) {
return this[n];
}, Object.fromEntries(sum.map(n => [ n.id, n.name ])));
// или
const names = new Map(sum.map(n => [ n.id, n.name ]));
const result = arr.map(n => names.get(n));
// или
const result = arr.map(n => sum.find(m => m.id === n)?.name);
sum
отсутствуют некоторые из нужных элементов, а получать undefined
внутри массива с результатами не хочется?const result = arr.map(function(n) {
return this[n] ?? 'объекта с таким id нет';
}, Object.fromEntries(sum.map(n => [ n.id, n.name ])));
const names = new Map(sum.map(n => [ n.id, n.name ]));
const result = arr.reduce((acc, n) => (names.has(n) && acc.push(names.get(n)), acc), []);
document.querySelectorAll('.parent').forEach((n, i) => {
n.insertAdjacentHTML('beforeend', `<div class="child">${arr[i]}</div>`);
});
$('.parent').append(i => `<div class="child">${arr[i]}</div>`);
const createArr = length =>
Array.from({ length }, (_, i) =>
Array.from({ length }, (_, j) =>
(i === j || i === length - j - 1) +
((i <= j && i <= length - j - 1) || (i >= j && i >= length - j - 1))
)
);
const newArr = arr.reduce((acc, n) => (
acc.push({ ...n, fractionTotal: n.fraction + (acc.at(-1)?.fractionTotal ?? 0) }),
acc
), []);
// или
const newArr = arr.map(function({ ...n }) {
n.fractionTotal = this[0] += n.fraction;
return n;
}, [ 0 ]);
arr.forEach((n, i, a) => n.fractionTotal = n.fraction + (i && a[i - 1].fractionTotal));
// или
arr.reduce((acc, n) => n.fractionTotal = acc + n.fraction, 0);
document.body.innerHTML = Array
.from({ length: 8 }, (_, i) => Array
.from({ length: 8 }, (_, j) => (i ^ j) & 1)
.join(''))
.join('<br>');
const ul = document.querySelector('ul');
ul.addEventListener('change', function() {
this.append(...Array
.from(this.children, n => [ n, n.innerText.trim(), n.querySelector('input').checked ])
.sort((a, b) => (b[2] - a[2]) || a[1].localeCompare(b[1]))
.map(n => n[0])
);
});
ul.dispatchEvent(new Event('change'));