let n = 0;
for (const c of 'Moloko') {
if (c === 'o') n++;
}
n // 3
String
упоминается в английской, но не в русской версии описания for .. of
removeEventListener()
document.body.addEventListener("click", clickHand("WOW!"));
function clickHand(str) {
const handler = ({ target }) => {
console.log(target);
console.log(str);
document.body.removeEventListener("click", handler);
};
return handler;
}
[1, 2, 3, .. 10]
Math.min()
возвращает минимальное значение среди переданных ему. Math.min()
положить несколько значений, из которых он выберет одно, минимальное.Math.min()
надо передать все значения из очередной строки.Math.min()
принимает варианты через запятую: Math.min(1, 3, 5)
, но у нас каждая строка это массив вроде [1, 3, 5]
Массив удобно «распаковать» с помощью трёх точек ...
(так называемый оператор расширения). Есть очередная строка в массиве arr
– передать её в Math.min(...arr)
– вернёт минимальное значение.for()
перебирает у вас как раз строки двумерного массива. То, что надо.for()
как у вас. Это длиннее, но тоже работает, особенно на больших объёмах данных. В таком варианте надо бы убрать Math.min()
в конце.s
не в 0
, а в константу Number.POSITIVE_INFINITY
– больше её точно ничего не будет, все значения окажутся меньше. А дальше сравнивать текущее значение s
с очередным числом из строки. И если очередное оказалось меньше — переназначать s
это значение, очередной найденный минимум.document.write(
mass.map(row => Math.min(...row)).join(', ')
); // 2, 4, 7
red.style.backgroundColor
– берётся элемент red
,const el = document.createElement('div');
div.style.backgroundColor = "red";
div.style.backgroundColor // "red"
div.classList.add("green-text"); // CSS .green-text { color: green; }
div.style.color // ""
<p style="font-weight: bold">Bold</p>
document.querySelector('p').style.fontWeight // "bold"
<p style="font-weight: bold">
<span>Bold</span>
</p>
document.querySelector('span').style.fontWeight // ""
let retryCount = 0;
const retryMax = 3;
const url = 'https://example.com/api/method';
const getData = () => {
$.get(url, data => {
// ...
}).fail(() => {
if (++retryCount <= retryMax) {
setTimeout(getData, 1000); // через секунду
} else {
console.error('Так и не получилось');
}
});
};
getData();
switch (Model[i].Type) {
case EventType.Call:
className = 'my-class-call';
break;
case EventType.Meeting:
className = 'my-class-meeting';
break;
// ...
}
<a class="@className" id="user-event-@i" href="@Url.Action("Details", "Event", new { @id = @Model[i].Id })">
<div style="width: 100%; min-height: 110px; border-top: 2px solid #CFCED1; border-left: 1px solid #CFCED1; border-right: 1px solid #CFCED1; background-color: @backgroundColor; cursor: pointer;">
</div>
</a>
.my-class-call { ... }
.my-class-call:hover { ... }
.my-class-meeting { ... }
.my-class-meeting:hover { ... }
{ Progger: 100, Tester: 200 }
const calculateTeamFinanceReport = (salaries, team) => {
const bySpec = team.reduce((acc, { specialization: spec }) => {
if (!Object.hasOwn(acc, spec)) acc[spec] = 0;
const { salary, tax } = salaries[spec];
const k = 1 + parseFloat(tax) / 100;
acc[spec] += salary * k;
return acc;
}, {});
const totalBudgetTeam = Object.values(bySpec).reduce((acc, c) => acc + c);
const result = Object.fromEntries(Object.entries(bySpec).map(([key, value]) => ['totalBudget' + key, value]));
return { totalBudgetTeam, ...result };
};
calculateTeamFinanceReport(salaries, team);
// { totalBudgetTeam: 3350, totalBudgetProgger: 1150, totalBudgetTester: 2200 }
Для разбора процентов удобна функция parseFloat()
– она читает цифры с начала строки, сколько может. И игнорирует буквы после. parseFloat('15.5%') === 15.5
const arrayOfObjects = [
{ student: 'Dmitriy', runLab () {return 1;}},
{ student: 'Andrew', runLab () {return 2;}},
{ student: 'Mellisa', runLab () {return 3;}},
{ student: 'Ann', XrunLab () {return 4;}},
];
function gradeLabs(labs, expectedResult = 1) {
labs.forEach(({ student, runLab }) => {
try {
const result = runLab();
if (result === expectedResult) {
console.log('Student %s has PASSED the test', student);
} else {
console.error('Student %s has FAILED the test', student);
}
} catch (e) {
console.error('Student: %s has FAILED the test. Error thrown: %o', student, e);
}
});
}
gradeLabs(arrayOfObjects, 1);
90
, а сейчас актуальная 109
, по умолчанию пробует в первую очередь протокол HTTPS (источник новости)