#search_table VS #search_card
input[name^=name] VS [data-item-name="name"]
val() VS text()
const addFilter = (listenSelector, findSelector, methodName) => {
$(listenSelector).keyup(function search() {
const search = this;
const searchValue = $(search).val().toLowerCase();
$("#tabname tbody tr")
.find(findSelector)
.each(function () {
const currentValue = $(this)[methodName]().toLowerCase();
$(this).closest("tr").toggle(currentValue.includes(searchValue));
});
});
};
addFilter('#search_table', 'input[name^=name]', 'val');
addFilter('#search_card', '[data-item-name="name"]', 'text');
Promise.allSettled()
– передать в него массив промисов запросов Axios, и в следующий then() попадёт массив с результатами:const batch = new Array(214)
.fill()
.map((_, i) => `https://example.com/api/${i}`) // URL запросов
.map(url => axios.get(url));
Promise.allSettled(batch)
.then(axiosResults => {
const results = [];
const errors = [];
axiosResults.forEach(({ status, res }) => {
if (status === 'fullfilled') {
results.push(res);
} else if (status === 'rejected') {
errors.push(res);
}
});
return { results, errors };
})
.then(({ results, errors }) => {
console.log('Вот результаты: %o, а вот ошибки: %o', results, errors);
});
let isExpanded = false; // единственный источник правды
el.addEventListener('click', () => {
isExpanded = !isExpanded; // переключить
// показать
linkusersnew.innerText = isExpanded ? 'Свернуть' : 'Развернуть';
userwrap.style.height = isExpanded ? '600px' : '400px';
newdel.style.display = isExpanded ? 'flex' : 'none';
});
- const signinbtn = document.queryselector('.signn-btn');
- const signupbtn = document.queryselector('.signup-btn');
- const formbox = document.queryselector('.formbox');
+ const signinbtn = document.querySelector('.signin-btn'); // имя класса
+ const signupbtn = document.querySelector('.signup-btn');
+ const formbox = document.querySelector('.formbox');
addEventListener
и classList
.querySelector()
– чуть другое.v
всегда число ("v" for "value"),c
— опциональный массив дочерних элементов ("c" for "children").if (last && Array.isArray(last.v)) {
тут, видимо, лишняя.v
это массив.. Так что нужна, если данные именно такие.if (last && typeof last.c === 'object') {
, за исключением корневого свойства, где это таки объект.last
- el.parentNode.replaceChild(customSelect, el);
+ el.parentNode.replaceChild(customSelect.cloneNode(true), el);
settParent
.settParent.addEventListener('input', ({ target }) => console.log(target.value));
computed
свойство emailObjects
emailObjects() {
return this.emails.map(email => ({
email,
isActive: email.includes(this.search),
});
},
т.е. тут вместо массива просто-email'ов делается массив объектов, где и email и свойство isActive, которое для данного адреса означает, включает он искомое или нет. .
начало
---|---|---
к | 1
о -
н | 2 1
е -
ц | 3 2 1
if - else if - else
function ranges(int $a, int $b): array
{
$start = 20;
$finish = 30;
$result = [
'before' => null,
'match' => null,
'after' => null,
];
if ($a < $start) {
if ($b < $start) {
$result['before'] = [$a, $b];
} else {
$result['before'] = [$a, $start];
if ($b < $finish) {
$result['match'] = [$start, $b];
} else {
$result['match'] = [$start, $finish];
$result['after'] = [$finish, $b];
}
}
} else if ($a < $finish) {
if ($b < $finish) {
$result['match'] = [$a, $b];
} else {
$result['match'] = [$a, $finish];
$result['after'] = [$finish, $b];
}
} else {
$result['after'] = [$a, $b];
}
return $result;
}
print(json_encode(ranges(5, 25))); // {"before":[5,20],"match":[20,25],"after":null}
$arr = [$start, $finish, $a, $b];
sort($arr, SORT_NUMERIC);
const dateInterval = [new Date(), new Date()];
const setTimes = interval =>
interval
.map(d => new Date(d))
.map((d, i) => {
d.setHours(23 * i);
d.setMinutes(59 * i);
d.setSeconds(59 * i);
d.setMilliseconds(999 * i);
return d;
});
setTimes(dateInterval)
// Array [
// Date Mon Nov 07 2022 00:00:00 GMT+0300 (Moscow Standard Time),
// Date Mon Nov 07 2022 23:59:59 GMT+0300 (Moscow Standard Time)
// ]
const { searchParams } = new URL(document.location.href);
const url = new URL('https://ya.ru');
['utm_source', 'utm_medium', 'utm_campaign']
.filter(param => searchParams.has(param))
.forEach(param => url.searchParams.set(param, searchParams.get(param)));
const urlString = url.toString();
document.querySelectorAll('div.tg-button > a')
.forEach(el => el.setAttribute('href', urlString));
Получить объект параметр-значение из адреса текущей страницы;1, 2, 3, 2, 3, 2, 1
0 + + - + - -
^ ^ ^ в этих точках знак поменялся
Складывать найденные точки в два массива: максимумы и минимумы.const target = { a: '', b: 'V'}; // скопируем сюда
const source = { a: 'AAA', c: 'CCC' }; // отсюда
Object.assign(target, source);
target // { a: "AAA", b: "V", c: "CCC" }
participants
, то можно так:hotel.forEach(({ room }) => room.forEach(slot => Object.assign(slot, participants.pop())));
participants
.let i = 0;
hotel.forEach(({ room }) =>
room.forEach((slot) => Object.assign(slot, participants[i++]))
);