(?:^"|;")(""|[\w\W]*?)(?=";|"$)|(?:^(?!")|;(?!"))([^;]*?)(?=$|;)|(\r\n|\n)// создаем стрелочную функцию, принимающую два параметра
const countChars = (str, char) => {
// создаем переменные и присваиваим им значение 0
let i = 0;
let count = 0;
// запускаем цикл с предусловием
while (i < str.length) { // пока i меньше чем длина строки str
// исполняем тело цикла
// берем символ из строки str расположенный по индексу i и переводим в нижний регистр
// берем символ из аргумента функции и переводим в нижний регистр
if (str[i].toLowerCase() === char.toLowerCase()) { // сравниваем оба значения
// если совпало увеличиваем счетчик на 1
count = count + 1;
}
// перед новой итерацией цикла увеличиваем индекс на 1
i = i + 1;
}
// возвращаем из функции накопленный результат подсчета или начальное значение если совпадений не было
return count;
};
let result = countChars('abba#abba#abba#', '#') // пример использования
console.log(result); // 3 function func(mixedData) {
const id = mixedData?.target?.id ?? mixedData;
console.log(id);
}
func(123) // 123
func({target: {id: 456}}) // 456?. — optional chaining?? — Nullish coalescing operator
function func(data) {
if (data instanceof Event) {
var id = data.target.id;
} else {
var id = data;
}
}detail в объекте событияfunction func(event) {
const id = event.detail ? event.detail.id : event.target.id;
}
domElement.dispatchEvent(new CustomEvent('event-name', { detail: { id: 'id-42' } })); npm install , а для этого нужно установить сначала Node.jsnpm run start) и соответственно запустить их в каждой из папок (клиент, сервер). (Хотя возможно настроено на запуск единой командой)
/* event.target.src = 'https://site.com/img/basket.svg' */
if (event.target.src == 'img/basket.svg') { // <-- вы проверяете // random order in-place
const shuffle = array => {
for (let i = array.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1)); // random index from 0 to i
[array[i], array[j]] = [array[j], array[i]];
}
};
// init
let coinIndex = -1;
const button = document.querySelector('.button');
button.addEventListener('click', () => {
if (coinIndex < 0) {
shuffle(coinFlip);
coinIndex = coinFlip.length - 1;
}
console.log(coinFlip[coinIndex]);
coinIndex--;
});
const data = Object.entries(сюда кидаете свои данные);
const years = Array
.from(new Set(data.flatMap(n => Object.keys(n[1].G))))
.sort((a, b) => a - b);
const columns = Array
.from(new Set(data.flatMap(n => Object.values(n[1].G).flatMap(Object.keys))))
.sort();<TableHead>
<TableRow>
<TableCell rowSpan={2}>regions</TableCell>
{years.map(n => <TableCell colSpan={columns.length}>{n}</TableCell>)}
</TableRow>
<TableRow>
{years.flatMap(n => columns.map(m => <TableCell>{m}</TableCell>))}
</TableRow>
</TableHead>
<TableBody>
{data.map(([ region, { G } ]) => (
<TableRow>
<TableCell>{region}</TableCell>
{years.flatMap(n => columns.map(m => <TableCell>{G[n]?.[m]?.value ?? 0}</TableCell>))}
</TableRow>
))}
</TableBody> CREATE TABLE artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE
);PRAGMA foreign_keys = ON; <body>
<p>Название</p>
<audio src='audio/Dich.mp3' controls audioplay></audio>
<p>Название</p>
<audio src='audio/Flower.mp3' controls audioplay></audio>
<p>Название</p>
<audio src='audio/Dich.mp3' controls audioplay></audio>
<p>Название</p>
<audio src='audio/Flower.mp3' controls audioplay></audio>
<p>Название</p>
<audio src='audio/Dich.mp3' controls audioplay></audio>
<p>Название</p>
<audio src='audio/Flower.mp3' controls audioplay></audio>
<script>
const aud = document.querySelectorAll('audio')
Array.from(aud).map(el => el.addEventListener('play', () => {
const played = document.querySelector('[data-play="true"]')
if(played && played !== el) {
played.pause()
played.removeAttribute('data-play')
}
el.dataset.play = 'true'
}))
</script>
</body> var options = {
root: document.querySelector('#scrollArea'),
rootMargin: '0px',
threshold: 1.0
}
var callback = function(entries, observer) {
/* Content excerpted, show below */
};
var observer = new IntersectionObserver(callback, options); .box-list__item {
display: grid;
}
.box-list__item:nth-child(8) ~ .box-list__item{
display: none;
}
.box-list__item:nth-child(8) ~ .box-list__item.ui-box-active{
display: grid;
}[...document.querySelectorAll( '.box-list__item:nth-child(8) ~ .box-list__item:not(.active)' )]
.slice(0,4)
.forEach( el => el.classList.add('ui-box-active') )