this в JavaScript.this равен глобальному объекту. Если включить строгий режим, вместо Window получим undefined.this. const delay = seconds => new Promise(res => setTimeout(res, 1000 * seconds));
const parse = async () => {
// ...
};
const main = async () => {
await delay(10); // подождать 10 секунд
await parse(); // что-то там спарсить
reloadPage(); // перезагрузить страницу
};
window.addEventListener('load', main); var переменная i всплывает наверх, видна отовсюду и 3 по окончании цикла. Это не то, что задумано.const и let чудесным образом исправляет досадное недоразумение:const arr = []; // ведь сам массив не планируется заменять
for (let i = 0; i <= 2; i++) { // главное: i теперь видна только внутри цикла
arr[i] = function () {
console.log(i);
};
}
arr[0](); // 0
arr[arr.length - 1](); // 2в исходном коде только лишь заменили var на const (не так важно) и let (вот это изменило всё!).const arr = [];
for (let i = 0; i <= 2; i++) {
arr[i] = () => console.log(i);
} [ключ, значение] методом fromEntries():Object.fromEntries(arr.map((v, i) => [i + 1, v]))map() создаётся новый, где каждый элемент это тоже массив:[ [1, 'a'], [2, 'b'], ... ]Object.fromEntries() для получения искомого объекта.` `, которыми окружено название таблицы, в шелле означают, что надо выполнить команду внутри них." ... ", то экранируйте эти обратные кавычки: ...IF NOT EXISTS \`stack-table\`bash даже и не нужна, можно сразу выполнять команду mysql:docker exec stack-mysql \
mysql -u root -proot -h mysql \
-e 'CREATE DATABASE IF NOT EXISTS `stack-table`';В одинарных кавычках экранировать обратные тики не нужно. const arr = [ 1, 2, 3, 4, 5, 6, 7] ;
const html = `<table><tbody>
${ arr.map(n => `<tr><td>${n}</td></tr>`).join() }
</tbody></table>`;
document.write(html); // вообще так лучше не делатьconst table = document.createElement('table');
const rows = arr.map(n => `<tr><td>${n}</td></tr>`).join();
table.innerHTML = rows;
document.body.appendChild(table);let — const )lodash.has() тоже навеное, недопустимо в задании?criteria,key = user[criteria]criteria строка "mark", переменная key получит значение 3 у первого юзера.const groupBy = (usersArr, criteria) => usersArr.reduce((acc, user) => ((acc[user[criteria]] ??= []).push(user), acc), {});function disemvowel(str) {
const vowels = ['a', 'e', 'i', 'o', 'u'];
return str
.split('')
.filter(char => !vowels.includes(char))
.join('');
}
console.log(disemvowel('Twinkle, twinkle, little star, How I wonder what you are.'));
// Twnkl, twnkl, lttl str, Hw I wndr wht y r. = capacity вместимость всего массива.X > capacity — «невпихуемо!» — задача не имеет решения.k = X / capacity меньше или равен 1.k.const spread = (value, arr) => {
const CELL_MAX = 1;
const sum = arr.reduce((acc, c) => acc + c);
const capacity = arr.length * CELL_MAX - sum;
if (value > capacity) throw new Error("Value won't fit");
const k = value / capacity;
return arr.map(el => el + (CELL_MAX - el) * k);
}
spread(0.2, [ 0.1, 0.1 ]) // [ 0.2, 0.2 ]
spread(0.2, [ 0.1, 0.99 ]) // [ 0.29780219780219785, 0.9921978021978022 ]elem, изменится и его «оригинал» – элемент массива. Но нет. Число возвели в квадрат, но в массиве всё осталось по-прежнему.elem не числом, а объектом, трюк сработал бы. let arr = [ {x: 1}, {x: 2}, {x: 3}, {x: 4}, {x: 5} ];
for (let elem of arr) {
elem.x = elem.x ** 2;
}
// [ {"x": 1}, {"x": 4}, {"x": 9}, {"x": 16}, {"x": 25} ]for .. in перебирает имена свойств объекта ('a', 'b', 'c', ...)for .. oftoString():const num = 10; // число
num.toString() // результат "10" – строка текстаObject.values(obj).reduce((acc, c) => acc + c.toString().match(/^[12]/), 0) // 2но здесь используется тяжёлый механизм регулярных выражений, хотя вполне можно без него; и неочевидное приведение типа Boolean к Number ради краткой записи. users[0].friends[0].genderfriends (массив). Был объект user, стал только его массив friends. Методом map()friends методом filter() надо оставить только тех, где gender === 'female'users получится массив массивов – иногда пустых, иногда с девушками.flat()map(fn).flat() заменить на один, делающий то же самое, flatMap(fn)users.flatMap(({ friends }) => friends.filter(({ gender }) => gender === 'female'));
// [ {"name":"Mira","gender":"female"}, {"name":"Aria","gender":"female"}, {"name":"Keit","gender":"female"} ]function countContiguousDistinct(k, arr) {
let cardinality = 0;
for (let i = 0; i < k; i++) {
if (i === arr.indexOf(arr[i])) cardinality++;
}
const result = [cardinality];
const isNotInWindow = (value, arr, start, finish) => {
for (let j = start; j < finish; j++) {
if (arr[j] === value) return false;
}
return true;
}
for (let i = 0; i < arr.length - k; i++) {
const L = arr[i];
const R = arr[i + k];
if (L !== R) {
if (isNotInWindow(L, arr, i + 1, i + k)) cardinality--;
if (isNotInWindow(R, arr, i + 1, i + k)) cardinality++;
}
result.push(cardinality);
}
return result;
}const htmlString = `<table>
<tr><td>Apple</td><td>12</td></tr>
<tr><td>Banana</td><td>34</td></tr>
</table>`;
const tmpl = document.createElement('template');
tmpl.innerHTML = htmlString;
const df = tmpl.content;
const rows = df.querySelectorAll('tr');
const result = [];
rows.forEach(row => {
result.push([...row.children].map(td => td.textContent));
});
result // [["Apple","12"],["Banana","34"]]