match
может вернуть null
и тогда произойдёт ошибка во время исполнения.const [a, b, c, d, f, g= ''] = value.match(/\d+/g) || [];
Либо, если ты на 146% уверен, что match
обязательно что-нибудь найдёт: const [a, b, c, d, f, g= ''] = value.match(/\d+/g) as string[];
error
, а не warning
- меня всегда вымораживает.Promise.all
:function XMLHttpPromise(method, url, data) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.onload = () => {
if (xhr.status === 200 && xhr.readyState === 4)
resolve(xhr.responseText);
else
reject("Error");
}
xhr.onerror = xhr.ontimeout = reject;
xhr.send(data);
})
}
Promise.all([
XMLHttpPromise('GET', `style.css`),
XMLHttpPromise('GET', `xmlData.html`)
]).then(([value, secondValue]) => {
console.log(value);
console.log(secondValue);
}).catch(console.error);
ts-node
в tsconfig.json
: {
"ts-node": {
"compilerOptions": {
"module": "CommonJS"
}
},
...
}
function toFlatMap(array, map = {}) {
for(const {name, children} of array) {
map[name] = children;
toFlatMap(children, map);
}
return map;
}
function toFlatMap(array, map = {}) {
let stack = array.slice();
let current;
while(current = stack.shift()) {
map[current.name] = current.children;
stack.push(...current.children);
}
return map;
}
date_from
и date_to
будут глобальными переменными. preventDefault()
), показываешь модал, и, после нажатия кнопки внутри модала, вручную вызываешь submit
этой формы повторно, в этот раз уже не препятствуя.isTrusted
) map
складывает в выходной массив результат переданной функции. Поскольку она у вас возвращает отфильтрованный массив items
, то в итоге у вас получается массив массивов items
. Если вам нужно, чтоб возвращались категории - возвращайте категории.reduce
: сonst filterData = filter(arr, input.value);
interface Category {
category: string;
list: Array<{
item: string;
}>;
}
function filter<T extends Category>(data: T[], value: string): T[] {
if (!value) return data.slice(); // или [] если при пустом value нужен пустой массив
value = value.toLowerCase();
return data.reduce((result, category) => {
if(category.category.toLowerCase().includes(value)) {
result.push(category);
} else {
const list = category.list.filter(({ item }) => item.toLowerCase().includes(value));
if (list.length) {
result.push({
...category,
list
});
}
}
return result;
}, [] as T[])
}
async
и await
, они здесь не нужны:const ApiServiceModule = {
get: <T>(url: string): Promise<T> => fetch(url)
.then(response => response.json())
.catch(err => console.error(err))
}
async
/await
всего лишь сахар над Promise
и в данном случае ничего не делают, т.к fetch
и так возвращает Promise
.this
.