{ "кришна": 4, "харе": 4, ":-O": 1 }
Оставить только те, где значения 1. Собрать в массив.const unique = arr => arr.filter((item, i) => i === arr.indexOf(item) && i === arr.lastIndexOf(item));
let offset = 0;
async function requestAndTreatment() {
// ...
const point = res.data[offset++];
data.addData([[res.timestamp, point.open, point.high, point.low, point.close]]);
}
second
,const timerObject = {
DATE: new Date(),
listDATE: {
get second() {
return new Date().getSeconds();
},
},
};
// читать, как обычно
console.log( timerObject.listDATE.second );
// через секунду
setTimeout(() => console.log( timerObject.listDATE.second ), 1000); // на 1 больше
const timerObject = {
DATE: new Date(),
listDATE: {
second: () => new Date().getSeconds(),
},
};
// использование
console.log( timerObject.listDATE.second() );
typeof arg === 'string'
// ещё можно длину проверить, а то, вдруг длинное пришлют
arg.length === 1
arg.toLowerCase() !== arg.toUpperCase()
// строка перевелась в разные кейсы
arg.toUpperCase() === arg // значит, буква в верхнем регистре
container=<string>
когда имя интересующего контейнера известно и постоянно.restart
– пусть контейнер перезапускается автоматом после падения. И может, при запуске как-то куда-то отправляет «Доброе утро, админ!» a
, а что за b
?» не самый удачный: в примере аргументы игнорируются.import(moduleName)
. Но у этого способа главный недостаток: WebPack соберёт в отдельный чанк все файлы с флагами, и бандл будет тяжеловат.import ru from "svg-country-flags/svg/ru.svg";
import ua from "svg-country-flags/svg/ua.svg";
// ...
// и там же экспорты:
export ru;
export ua;
// ...
import { ru, ua } from './mySuperModule';
И Webpack разберётся и включит в бандл только нужное.document.querySelector("#******")
вернёт undefined, и попытка получить из него свойство innerText
выкинет ошибку. Загляните в консоль.const el = document.querySelector("#******");
if (el) {
const a = el.innerText;
if (a.length === 0) {
el.value = "123"; // а что это за элемент, у которого и innerText и value ?
}
}
const obj = { name: 'Boris', age: 5};
// переназначить свойство с геттерами и сеттерами
// ниже очччень сокращённый пример
Object.defineProperty(obj, "name", {
set(newName) {
console.log("Name changed to", newName);
}
});
// проверяем:
obj.name = "Toster"; // в консоль выведет "Name changed to Toster"
на деле нужно сохранить начальное значение, где-то хранить значение свойства name
, и добавить геттер. Т.к. вероятно, не единственное свойство захочется так подменить, лучше будет воспользоваться «оптовым» Object.defineProperties() или в цикле по свойствам объекта каждое сделать Object.defineProperty()
forEach()
querySelectorAll()
возвращает статичный набор.forEach()
, или же получать динамическую коллекцию, используя соотв. метод.
- Статусы заказа (открыт/выпущен/закрыт и т. п.)
- Статусы сборки заказа (ожидает сборки, сборка начата, сборка проверена, сборка завершена)
Формула оплаты заказа (тут много вариантов)- Фонд оплаты (собственные средства, федеральный бюджет, территориальный и т. п.))
- Внутренний клиент (одно из возможных внутренних ООО)
- Ответственный сотрудник
- Территориальный сектор
- Направление
showNumber(1)
showNumber(1)
- вывела в консоль "1", и зарядила новый таймаут, уже с showNumber(2)
. Убедились, что 2 не равно 6.showNumber(2)
, вывели в консоль "2", зарядили таймаут (3)showNumber(5)
6 === 6
, и раз так — тут же гасит свежезаряженный таймаут, ибо нечего ему срабатывать.setTimeout()
. Вызов setTimeout()
отрабатывает сразу и выполнение идёт дальше. Но этот вызов не выполняет, а лишь откладывает на потом – задачу вызова какой-то функции с параметрами. undefined
)const users = [
{name: 'Ann'},
{name: 'George'},
{name: 'Rebecca'}
];
if (users.find(user => user.name === 'Rebecca')) {
// уже есть такой юзер
} else {
// добавляем
}