Как проверить, есть ли в массиве повторяющиеся элементы...
const hasDuplicates = arr.length > new Set(arr).size;...и как записать эти элементы в новый массив...
// Получаем повторяющиеся элементы в единственном экземпляре
const duplicatedItemsUnique = Array.from(arr.reduce((acc, n) => (
acc[+acc[0].has(n)].add(n),
acc
), [ new Set, new Set ])[1]);
// Получаем все неуникальные элементы
const duplicatedItemsAll = arr.filter(function(n) {
return this.get(n) > 1;
}, arr.reduce((acc, n) => acc.set(n, -~acc.get(n)), new Map));...или оставить только элементы которые повторяются?
arr.splice(0, arr.length, ...arr.filter(function(n) {
return this.get(n);
}, arr.reduce((acc, n) => acc.set(n, acc.has(n)), new Map)));
const containerSelector = '.lg-container';
const itemSelector = `${containerSelector} .lg-hotspot`;
const buttonSelector = `${itemSelector} .lg-hotspot__button`;
const activeClass = 'lg-hotspot--selected';
document.addEventListener('click', ({ target: t }) => {
const button = t.closest(buttonSelector);
const item = t.closest(itemSelector);
if (button) {
item.closest(containerSelector).querySelectorAll(itemSelector).forEach(n => {
n.classList[n === item ? 'toggle' : 'remove'](activeClass);
});
} else if (!item?.classList.contains(activeClass)) {
document.querySelectorAll(itemSelector).forEach(n => {
n.classList.remove(activeClass);
});
}
});item.closest(containerSelector) надо заменить на document.
export default connect(
mapStateToProps,
mapDispatchToProps
)(App);
return character === '...' ? '...' : character;const replacements = {
'...': '...',
'...': '...',
...
};
const newCharacters = characters.map(n => replacements[n] || n);
arr.flatMap(n => n.split(', ').map(Number))`${arr}`.split(/\D+/).map(n => +n)String(arr).match(/\d+/g).map(n => parseInt(n))eval('[' + arr + ']')JSON.parse('['.concat(arr, ']'))
$('.box-none', this).slideToggle(300);$(this).find('.box-none').slideToggle(300);
$('.trainers__profile').on('mouseenter mouseleave', e => {
$('div', e.currentTarget)
.stop()
.animate({ opacity: +(e.type === 'mouseenter') }, 300);
});
document.querySelector('.copybox').addEventListener('click', ({ target: t }) => {
if (t.tagName === 'BUTTON') {
navigator.clipboard.writeText(t.previousElementSibling.textContent);
}
});
const groupedAndUnique = Object.entries(arr.reduce((acc, n) => {
(acc[n.category] = acc[n.category] ?? new Set).add(n.type);
return acc;
}, {}));document.body.insertAdjacentHTML('beforeend', `
<ul>${groupedAndUnique.map(([ k, v ]) => `
<li>
${k}
<ul>${Array.from(v, n => `
<li>${n}</li>`).join('')}
</ul>
</li>`).join('')}
</ul>`
);const ul = document.createElement('ul');
ul.append(...groupedAndUnique.map(([ header, items ]) => {
const li = document.createElement('li');
li.append(header, document.createElement('ul'));
for (const n of items) {
li.lastChild.append(document.createElement('li'));
li.lastChild.lastChild.textContent = n;
}
return li;
}));
document.body.append(ul);
$('.chosen-select')
.find(`option[data-value="${category}"]`)
.prop('selected', true)
.end()
.trigger('chosen:updated');
$owl.on('mouseenter mouseleave', function(e) {
$(this).data('owl.carousel').options.autoplay = e.type === 'mouseenter';
$(this).trigger('refresh.owl.carousel');
});$owl.on('mouseenter mouseleave', function(e) {
$(this).trigger(({
mouseenter: 'play',
mouseleave: 'stop',
})[e.type] + '.owl.autoplay');
});
const index = вам виднее, что тут должно быть;
const className = 'header';
const selector = `.${className}`;
const key = 'id';
const attr = `data-${key}`;const parentSelector = 'table tbody';):const $elements = $(parentSelector).children();
const $el = $elements.eq(Math.min(index, $elements.length - 1));
const val = ($el.is(selector) ? $el : $el.prev(selector)).attr(attr) ?? null;
// или
const elements = document.querySelector(parentSelector).children;
let val = null;
for (let i = Math.min(index, ~-elements.length); i >= 0; i--) {
if (elements[i].matches(selector)) {
val = elements[i].getAttribute(attr);
break;
}
}const elementsSelector = 'table tr';) разные (конкретно в вашем случае это могла бы быть таблица с несколькими tbody):const val = $(elementsSelector)
.slice(0, index + 1)
.filter(selector)
.last()
.data(key) ?? null;
// или (UPD. На момент публикации вопроса метод findLast отсутствовал,
// вместо него использовалась связка из reverse-find)
const { [key]: val = null } = Array
.from(document.querySelectorAll(elementsSelector))
.slice(0, -~index)
.findLast(n => n.classList.contains(className))
?.dataset ?? {};
Uncaught TypeError: number[i].parents is not a function
number[i] должно было быть $(number[i]) или number.eq(i).$('.person-wr a.desc')
.filter((i, n) => !$(n).text().trim())
.closest('.add-info')
.hide();document.querySelectorAll('.person-wr a.desc').forEach(n => {
n.closest('.add-info').hidden = !n.text.trim();
});
const itemSelector = '.preliminary-item';
const keys = [ 'name', 'quantity', 'proximity' ];
const sourceSelector = key => `.request-${key}`;
const targetSelector = key => `.result-${key}`;$(document).on('click', itemSelector, function() {
$.each(keys, (i, n) => {
$(targetSelector(n)).append(`<p>${$(sourceSelector(n), this).text()}</p>`);
});
});
// или
document.addEventListener('click', function({ target: t }) {
if (t = t.closest(itemSelector)) {
keys.forEach((n, i) => this[i].insertAdjacentHTML(
'beforeend',
`<p>${t.querySelector(sourceSelector(n)).textContent}</p>`
));
}
}.bind(keys.map(n => document.querySelector(targetSelector(n)))));
case 'TURN_DONE_POST':
return {
...state,
data: state.data.map(n => n.id === action.payload
? { ...n, done: !n.done }
: n
),
};