Как проверить, есть ли в массиве повторяющиеся элементы...
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
. 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);
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');
Uncaught TypeError: number[i].parents is not a function
number[i]
должно было быть $(number[i])
или number.eq(i)
. Но вообще, организовывать цикл вручную нет необходимости:$('.person-wr a.desc')
.filter((i, n) => !n.innerText.trim())
.closest('.add-info')
.hide();
document.addEventListener('click', e => {
const item = e.target.closest('.preliminary-item');
if (item) {
[ 'name', 'quantity', 'proximity' ].forEach(n => {
const html = `<p>${item.querySelector(`.request-${n}`).textContent}</p>`;
document.querySelector(`.result-${n}`).insertAdjacentHTML('beforeend', html);
});
}
});
$(document).on('click', '.preliminary-item', function() {
$.each([ 'name', 'quantity', 'proximity' ], (i, n) => {
$(`.result-${n}`).append(`<p>${$(`.request-${n}`, this).text()}</p>`);
});
});
function getGridSize() {
const w = window.innerWidth;
return [ 500, 700, 1225, Infinity ].findIndex(n => n > w) + 1;
}
function getGridSize() {
const w = window.innerWidth;
return [
{ size: 1, maxWidth: 500 },
{ size: 2, maxWidth: 700 },
{ size: 3, maxWidth: 1225 },
{ size: 4, maxWidth: Infinity },
].find(n => n.maxWidth > w).size;
}
const isEqual = (a, b) =>
a.length === b.length && a.every((n, i) => Object.is(n, b[i]));
const includes = (arrs, search) =>
arrs.some(n => isEqual(n, search));
console.log(includes(array, [ 21, 81 ]));
. el.dispatchEvent(new Event('click'));
// или, если обработчик клика висит не на самом svg, а выше
el.dispatchEvent(new Event('click', { bubbles: true }));
const colors = [
{ color: '...', image: '...' },
{ color: '...', image: '...' },
...
];
background-color
на background-image
:const colorsItems = colors
.map(n => `
<button
style="background-image: url(${n.image})"
class="palette-button"
data-color="${n.color}"
></button>`)
.join('');
.palette-button
- приводите в порядок background:background-position: center;
background-size: contain;
background-repeat: no-repeat;
const markerData = [
{ coord: [ ... ], content: '...' },
{ coord: [ ... ], content: '...' },
...
];
markerData.forEach(function(n) {
const marker = new google.maps.Marker({
position: new google.maps.LatLng(...n.coord),
map,
});
marker.addListener('click', function() {
infowindow.setContent(n.content);
infowindow.open(map, marker);
});
});
name="delivery"
, data-post
- пусть оба будут или delivery, или post). Сделайте пустыми строками значения option'ов, которые соответствуют всем вариантам.$('.result-btn').on('click', function() {
const values = $('select')
.get()
.filter(n => n.value)
.map(n => [ n.name, n.value.toLowerCase() ]);
$('.delivery-table-item')
.show()
.filter((i, { dataset: d }) => values.some(([ k, v ]) => d[k].toLowerCase() !== v))
.hide();
});