async requestToSuip(suip, num_oper = '') {
const exampleData = {
result: false,
requisite: "",
amount: 0,
created: null,
suip: null
};
const url1 = "http://api-1/sber/cashout/suip/" + suip;
const url2 = "http://api-2/sber/cashout/txnid/" + num_oper;
const {data: data1} = await axios.get(url1);
const isEqual = Object.keys(exampleData)
.every(prop => exampleData[prop] === data1[prop]);
if (isEqual === false) {
return data1;
}
const {data: data2} = await axios.get(url2);
return {
...data1,
...data2, // поля из data2 перезапишут такие же из data1
};
}
function deep() {
function veryDeep() {
const inception = () => {
// во глубине сибирских руд:
globalThis.myGlobalVar = 'Habr'; // глобализм!
};
inception();
}
veryDeep();
}
deep();
console.log(myGlobalVar); // "Habr"
// random order in-place
const shuffle = array => {
for (let i = array.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1)); // random index from 0 to i
[array[i], array[j]] = [array[j], array[i]];
}
};
// init
let coinIndex = -1;
const button = document.querySelector('.button');
button.addEventListener('click', () => {
if (coinIndex < 0) {
shuffle(coinFlip);
coinIndex = coinFlip.length - 1;
}
console.log(coinFlip[coinIndex]);
coinIndex--;
});
id
?const handleClick = id => () => {
document.querySelector('.container_wrp')?.remove();
const div = document.createElement('div');
div.style.width = '700px';
div.style.height = '500px';
div.id = id;
div.classList.add('container_wrp');
wrpBlock.appendChild(div);
};
jccBtnJap.addEventListener('click', handleClick('jap_container'));
jccBars.addEventListener('click', handleClick('stick_container'));
тут handleClick()
возвращает функцию, которая даёт создаваемому элементу переданный id. Thefor...in
statement iterates over all enumerable properties of an object
that are keyed by strings
(ignoring ones keyed by Symbols),
including inherited enumerable properties.
const m = new Map();
m.set({}, 'obj');
m.set('a', 'A');
// это другое
m.b = 'B';
for (let prop in m) {
console.log('property', prop);
}
// property b
import produce from "immer"
const nextState = produce(this.state, draft => {
// тут можно всё менять, не беспокоясь об иммутабельности
const { catValue } = draft;
catValue.cat.colors = Color.BLACK;
});
this.setState(nextState);
import produce from "immer"
const { catValue } = this.state;
const nextCatValue = produce(catValue, draft => {
// тут можно всё менять, не беспокоясь об иммутабельности
catValue.cat.colors = Color.BLACK;
});
this.setState({ catValue: nextCatValue });
cloneNode()
сработает только если слушатели прописаны прямо в атрибутах элемента <a onclick="alert('Habr')">click me</a>
addEventListener()
скопировать можно примерно никак.function myClickHandler(event) {
// что-то сделать по поводу клика
}
element1.addEventListener('click', myClickHandler);
element2.addEventListener('click', myClickHandler);
element3.addEventListener('click', myClickHandler);
<div id="parent">
<button>1</button>
<button>2</button>
<button>3</button>
</div>
и слушать клики на div#parent Для того, чтобы объект был итерируемым, в нем должен быть реализован метод@@iterator
, т.е. этот объект (или любой из объектов из его prototype chain) должен иметь свойство с именемSymbol.iterator
:
Свойство:[Symbol.iterator]
Значение: Функция без аргументов, возвращающая объект, соответствующий iterator protocol.
{ next() { /* ... */ }}
, или, как в вашем примере, метод next()
определён на самом объекте, поэтому возвращается this
.[...Collection.values()].sort((a, b) => a.guild.raw - b.guild.raw).pop()
Map
. Привести его значения к массиву. Отсортировать по значению guild.raw
по возрастанию. Взять последний объект – он с наибольшим значением raw
.[...Collection.values()]
.reduce((max, current) => max.guild.raw > current.guild.raw ? max : current)
Стрелка=>
ничего не привязывает. У функции просто нетthis
.
При получении значенияthis
– оно, как обычная переменная, берётся из внешнего лексического окружения.
const obj = {
w() {
console.log('w', this);
},
x: function () {
console.log('x', this);
},
y: this,
z: () => {
console.log('z', this);
},
};
obj.w(); // obj
obj.x(); // obj
console.log('y', obj.y); // Window
obj.z(); // Window
this
тот же, что и снаружи:const a = this; // Window
const obj = {
b: this, // тоже Window
}
a === obj.b // true
(function toster() {
console.log(toster);
})();
{ "кришна": 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 // значит, буква в верхнем регистре