(function() {
function func(arg) {
console.log(arg, this);
}
let arg = 1;
const f1 = () => func(arg);
const f2 = func.bind(this, arg);
arg = 2;
f1();
f2();
}).call('hello, world!!');
Array.from(str, n => n < 5 ? 0 : 1).join('')
// или
[...str].reduce((acc, n) => acc + +(n >= 5), '')
// или
''.concat(...str.split('').map(n => Math.floor(n / 5)))
// или
[].map.call(str, n => -~-~-~n >> 3).join``
// или
str.replace(/./g, m => Number('56789'.includes(m)))
// или
str.replace(/[1-4]/g, 0).replace(/[5-9]/g, 1)
const newArr = Array.from(
{ length: arr.length / 2 },
(n, i) => ({ ...arr[i], ...arr[i + arr.length / 2] })
);
const numKeys = new Set(arr.flatMap(Object.keys)).size;
const newArr = arr.reduce((acc, n, i, a) => (
Object.assign(acc[i % (a.length / numKeys)] ??= {}, n),
acc
), []);
// или
const numKeys = Object.keys(Object.assign({}, ...arr)).length;
const numObjs = arr.length / numKeys;
const newArr = Array.from(
{ length: numObjs },
(n, i) => Object.assign({}, ...Array.from(
{ length: numKeys },
(m, j) => arr[j * numObjs + i]
))
);
const newArr = arr.reduce((acc, n) => {
const [ [ k, v ] ] = Object.entries(n);
const i = acc[0][k] = (acc[0][k] ?? -1) + 1;
(acc[1][i] ??= {})[k] = v;
return acc;
}, [ {}, [] ])[1];
<a>
. Соответственно, не будет и атрибута href
. А у null
не будет метода substr
. О чём вы должны были узнать сами, из сообщения об ошибке - если бы открыли консоль.target
следует использовать currentTarget. url.match(/.+\//)[0]
// или
url.replace(/[^\/]+$/, '')
// или
url.slice(0, url.lastIndexOf('/') + 1)
// или
url.split(/(?<=\/)/).slice(0, -1).join('')
// или
[...url].reduceRight((acc, n) => (acc || n === '/') ? n + acc : acc, '')
const where = '.list';
const what = '.content';
const $targets = $(where).children();
$(what).each((i, n) => $targets.eq(i).append(n));
const targets = document.querySelector(where).children;
document.querySelectorAll(what).forEach((n, i) => targets[i]?.append(n));
Object.values(data).flat().find(n => n.title === search)
Object.fromEntries(Object
.entries(data)
.map(n => [ n[0], n[1].filter(m => m.title.toLowerCase().includes(search.toLowerCase())) ])
.filter(n => n[1].length)
)
str.slice(1, -1).split(', ')
// или
JSON.parse(str.replace(/[а-яё]+/g, '"$&"'))
// или
str.match(/[^\s\[\],]+/g) ?? []
coord.split(', ').map(Number)
// или
coord.match(/[\d.]+/g).map(n => +n)
// или
eval(`[${coord}]`)
// или
JSON.parse('['.concat(coord, ']'))
// или
Array.from(coord.matchAll(/[^, ]+/g), parseFloat)
const result = [...subcategory.reduce(
(acc, n) => (acc.get(n.category)?.children.push(n), acc),
new Map(category.map(n => [ n.id, { ...n, children: [] } ]))
).values()];
const result = category.map(n => ({
...n,
children: subcategory.filter(m => m.category === n.id),
}));
const result = category.map(function(n) {
return {
...n,
children: this[n.id] ?? [],
};
}, subcategory.reduce((acc, n) => ((acc[n.category] ??= []).push(n), acc), {}));
$('.item').on('mouseover', '.dot', function({ delegateTarget: t }) {
$('.thumb-target', t).attr('src', $(this).data('img'));
$('.dot', t).removeClass('select').filter(this).addClass('select');
});
document.querySelectorAll('.item').forEach(n => {
n.addEventListener('mouseover', onMouseOver);
});
function onMouseOver({ target: t, currentTarget: ct }) {
const dot = t.closest('.dot');
if (dot) {
ct.querySelector('.thumb-target').src = dot.dataset.img;
ct.querySelectorAll('.dot').forEach(n => {
n.classList.toggle('select', n === dot);
});
}
}
const sum = (...arr) => arr
.flatMap(Object.entries)
.reduce((acc, [ k, v ]) => (
acc[k] = (acc[k] ?? 0) + v,
acc
), {});
function sum() {
const result = {};
for (const n of arguments) {
for (const k in n) {
if (n.hasOwnProperty(k)) {
if (!result.hasOwnProperty(k)) {
result[k] = 0;
}
result[k] += n[k];
}
}
}
return result;
}
const obj = sum(obj1, obj2);
. const container = document.querySelector('#element');
const itemSelector = '.someclass';
function onClick(e) {
e.preventDefault();
console.log(e.target.closest('li').dataset.id);
}
container.querySelectorAll(itemSelector).forEach(n => {
n.addEventListener('click', onClick);
});
container.addEventListener('click', e => {
const item = e.target.closest(itemSelector);
if (item) {
onClick(e);
}
});
function sort(arr) {
const obj = Object.fromEntries(arr.map(n => [ n.parent, n ]));
const sorted = [];
for (let item = obj['null']; item; item = obj[item.id]) {
sorted.push(item);
}
return sorted;
}
function sort(arr, parent = null) {
const item = arr.find(n => n.parent === parent);
return item
? [ item, ...sort(arr, item.id) ]
: [];
}