setValue(value === e.target.value);
value ===
.setValue(Math.min(max, Math.max(min, e.target.value)));
Хотел реализовать тоже самое с двойным range слайдером и оказалось несколько сложнее.
const sum = (...v1) => {
const f = (...v2) => v2.length
? sum(...v1, ...v2)
: v1.reduce((acc, n) => acc + n, 0);
return v1.length ? f : f();
};
const keys = [...new Set(arr.flatMap(Object.keys))];
const result = arr.reduce((acc, n) => {
keys.forEach(k => acc[k].push(n[k] ?? 0));
return acc;
}, Object.fromEntries(keys.map(n => [ n, [] ])));
{cats.map((cat, index) => (
<li key={cat.description} className="catsItem">
<img src={catsImg[index]} alt=""/>
...
$('.text').html((i, html) => {
const regex = /@(\w+)/g;
const replacement = (m, g1) => `<a href="https:\/\/site.com/${g1}">${m}</a>`;
return html.replace(regex, replacement);
});
lower = next((n for n in reversed(lst) if n <= num), float('-inf'))
upper = next((n for n in lst if n >= num), float('inf'))
print([ lower, upper ])
() =>
перед openLightboxOnSlide(key)
(кстати, а какого хрена переменная, содержащая индекс, названа key?).null
- это будет означать, что показывать ничего не надо:const [ lightIndex, setLightIndex ] = useState(null);
<img onClick={() => setLightIndex(key)} />
<ReactBnbGallery
photos={photos}
show={lightIndex !== null}
activePhotoIndex={lightIndex}
onClose={() => setLightIndex(null)}
/>
const urls = [ '...', '...', ... ];
Promise
.all(urls.map(n => fetch(n).then(r => r.json())))
.then(обработатьРезультаты)
.catch(err => console.error(err));
function обработатьРезультаты(results) {
...
}
preg_match_all('~\d+~', $s, $match);
echo implode(', ', array_map(fn($n) => '!qwertyuio'[$n], $match[0]));
return [...el].map((n) => new Select(n));
Select
на this.constructor
. document.querySelector('.container-filter').addEventListener('input', function() {
const maxPrice = +this.querySelector('.range').value;
const brands = [...this.querySelectorAll('.input:checked')].map(n => n.parentNode.innerText);
const years = [...this.querySelectorAll('.input-date:checked')].map(n => n.parentNode.innerText);
document.querySelectorAll('.device .laptop').forEach(n => {
const price = parseInt(n.querySelector('.laptop-price').innerText.split(': ')[1]);
const brand = n.querySelector('.laptop-name').innerText.split(': ')[1];
const year = n.querySelector('.laptop-year').innerText.split(': ')[1];
n.style.display = (
(maxPrice >= price) &&
(!brands.length || brands.includes(brand)) &&
(!years.length || years.includes(year))
)
? 'block'
: 'none';
});
});
str.replace(/(\d{2})(\d{2})(\d{4})/, '$1.$2.$3')
[ 0, 2, 4 ].map((n, i, a) => str.slice(n, a[i + 1])).join('.')
document.querySelector('.child-row').addEventListener('click', e => {
if (e.target !== e.currentTarget) {
[...e.currentTarget.children].forEach(n => n.classList.toggle('active', n === e.target));
}
});
on: {
breakpoint() {
this.el.classList.toggle('класс', this.slides.length < this.params.slidesPerView);
},
},
ref={ref}
элементу, который собираетесь скрывать.document.querySelector('.content').addEventListener('click', e => {
const { block } = e.target.dataset;
if (block) {
console.log(document.querySelectorAll(`.wrap [data-block="${block}"]`).length);
}
});