// сократить актёров
"актёры".replace(/ы$/, "") // актёр
// но сохранить животных
"Животные".replace(/ы$/, "") // Животные indexOf(), который возвращает -1 если не найдено, или индекс от 0 и больше.-1 или иное значение. Можно просто сравнивать if (a.indexOf(b) > -1) { /* найдено! */ } но иногда хочется короче.~ хорош тем, что выделяет -1: только -1 с этим оператором даст 0. Прочие числа дадут какое-то ненулевое значение.~(-1) === 00 и больше получилось тоже ненулевое число, и !! даст true-1 получится уникальный 0, и !!0 вернёт false[ 06:00, 18:00 ] От них две середины — и полдень и полночь – одинаково удалены: куда рванём?(x, y) координат. Считать среднее из этих точек, и считать угол, указывающий на «среднюю» точку:name и age указывают на массивы, а они, как и любые объекты в JavaScript, передаются «по ссылке», т.е. передаётся указатель на место в памяти, где лежит массив. Прочитайте по ссылке «по ссылке» : ) — там действительно подробно и с картинками описывают проблему.this.save оказываются те же самые массивы, что и в obj. Меняете там, меняется тут, и наоборот. Разорвать порочную связь можно, например, грубоватым и не самым эффективным способом:const obj_copy = JSON.parse(JSON.stringify( obj ));
// создали действительно независимую «глубокую копию» объектаДля нехитрого объекта без функций-методов и всяких Map/Set'ов это годится. const TIMEOUT = "TIMEOUT";
for (let i=0; i < 300; i++) {
await Promise.any([
Order(i), // то самое стороннее апи
new Promise((resolve) => setTimeout(() => resolve(TIMEOUT), 3 * 6e4))
])
.then((result) => {
if (result === TIMEOUT) {
console.log(TIMEOUT);
} else {
console.log("Order fulfilled");
}
})
}b.style.width = 5 + 'px';(function (){
let a = 75; // видимо, начальная ширина?
const out = document.querySelector('.out-1');
const update = (delta = 0) => out.style.width = `${a += delta}px`;
update();
document.querySelector('.btn1')
.addEventListener('click', () => update(10));
// так можно добавить вторую кнопку для укорачивания:
document.querySelector('.btn2')
.addEventListener('click', () => update(-10));
})();parentNode — лишнее дублирование инфы.{ id: 1, address: [0], children: [
{ id: 2, address: [0, 0], children: [
{ id: 3, address: [0, 0, 0], },
{ id: 99, address: [0, 0, 1], },
{ id: 999, address: [0, 0, 2], },
]}
]}Map(): [0]: {title: 'первый', id: 1, }, // поле children убрали
[0, 0]: { title: 'второй', id: 2 },
[0, 0, 0]: { title: 'третий', id: 3 },var url = '?email=email@mail.ru&login=1298384';
const params = new URLSearchParams(url); // начальный знак ? игнорируется
params.get("email") // "email@mail.ru"
params.get("login") // "1298384"${ } можно помещать не любой код, а выражения. Что-то, имеющее значение: `Привет, ${ ["м", "р"].join("и") }!`audio наследует свои свойства и методы от HTMLMediaElement. Например, можно читать или устанавливать его свойство volume.function test({ a = "Aa", b = "bar", c = "Цеце" }) {
console.log({a, b, c});
// что-то делаем с переменными a, b, c:
console.log(`${a} ${c} пошла в ${b}`);
}
test({ a: "100" }); // { a: "100", b: "bar", c: "Цеце" }
// 100 Цеце пошла в bar // auth.js
var myAuth = "secret";
// logic.js
function logic() {
console.log(myAuth);
}<script>
var myAuth = "secret";
function logic() {
console.log(myAuth);
}
</script>Поэтому все друг друга видят, слышат и дружат )const mondaySunday = (d) => d.getDay() || 7; // чтоб воскресенье не 0, а 7
const getShortWeek = (d, last = false) => {
const D = new Date(d.getTime()); // копия, чтобы ориг. дату не сбить
D.setDate(1); // 1-й день месяца
if (! last) return 7 - mondaySunday(D);
D.setMonth(D.getMonth() + 1); // добавить месяц
D.setDate(D.getDate() - 1); // отнять день
return mondaySunday(D);
}
const leastDays = (d) => Math.min(getShortWeek(d), getShortWeek(d, true));
leastDays(new Date(2021, 10, 10)) // 2