const arr = [
{
name: 'test1',
koef: 1,
id: 1,
age: 23
},
{
name: 'test2',
koef: 1,
id: 2,
age: 23
},
{
name: 'test3',
koef: 2,
id: 3,
age: 23
},
{
name: 'test4',
koef: 2,
id: 4,
age: 23
},
{
name: 'test5',
koef: 3,
id: 5,
age: 23
},
{
name: 'test6',
koef: 3,
id: 6,
age: 23
},
];
const createMap = (array, key) => new Map(array.map(entry => [entry[key], entry]));
const map = createMap(arr, 'name');
console.log(map);
/*
Map(6) {
'test1' => { name: 'test1', koef: 1, id: 1, age: 23 },
'test2' => { name: 'test2', koef: 1, id: 2, age: 23 },
'test3' => { name: 'test3', koef: 2, id: 3, age: 23 },
'test4' => { name: 'test4', koef: 2, id: 4, age: 23 },
'test5' => { name: 'test5', koef: 3, id: 5, age: 23 },
'test6' => { name: 'test6', koef: 3, id: 6, age: 23 }
}
*/
map.get('test6').koef = map.get('test1').koef;
console.log(map);
/*
Map(6) {
'test1' => { name: 'test1', koef: 1, id: 1, age: 23 },
'test2' => { name: 'test2', koef: 1, id: 2, age: 23 },
'test3' => { name: 'test3', koef: 2, id: 3, age: 23 },
'test4' => { name: 'test4', koef: 2, id: 4, age: 23 },
'test5' => { name: 'test5', koef: 3, id: 5, age: 23 },
'test6' => { name: 'test6', koef: 1, id: 6, age: 23 }
}
*/
function convertRGBAtoHEX(channels) {
const hexChannels = channels.map(entry => (`0${entry.toString(16)}`).slice(-2));
return (`#${hexChannels.join('')}`);
}
function parseRGBA(raw) {
const channels = raw
.replace(/rgba|rgb|\(|\)/g, '')
.split(/,\s*/g)
.map((entry, index) => {
const number = parseFloat(entry, 10);
return (index === 3) ? Math.floor(number * 255) : number;
});
return channels;
}
console.log(convertRGBAtoHEX(parseRGBA('rgba(255, 0, 100, .7)'))); // #ff0064b2
console.log(convertRGBAtoHEX([255, 0, 100, 178])); // #ff0064b2
console.log(convertRGBAtoHEX([255, 0, 100])); // #ff0064
window.addEventListener('resize', function () { // Можно принимать объект события
// Если width глобальная переменная
width = screen.width;
});
let colors = ['red', 'pink', 'coral', 'orange', 'yellow' ,'green'];
let index = 0;
function changeColor() {
p.style.setProperty('background-color', colors[index++]);
index %= colors.length;
}
let interval = setInterval(changeColor, 1000);
this.configDb = c;
. Если это какой-то метод (функция), то можно сделать нечто подобное class Some {
constructor() {
this.configDb = {
user: null,
password: null,
connectString: null
};
}
static required(name) {
throw new Error(`Argument ${name} is required`);
}
setConfig({
user = Some.required('user'),
password = Some.required('password'),
connectString = Some.required('connectString')
}) {
this.configDb = { user, password, connectString };
}
}
const some = new Some();
some.setConfig({
user: 'John',
password: 'qwerty',
connectString: 'example.com'
});
console.log(some); // { configDb: { user: 'John', password: 'qwerty', connectString: 'example.com' } }
some.setConfig({
password: 'root'
}); // Error: Argument user is required
setConfig
. Если просто setConfig({ user, password, connectString })
. И какой бы объект не передали в функцию, она получит только эти 3 аргумента. (async () => {
const sleep = duration => new Promise(resolve => setTimeout(resolve, duration));
for (let index = 0; index < 5; index++) {
console.log(`[${new Date().toLocaleTimeString()}] Index: ${index}`);
await sleep(1000);
}
})();
/*
[12:18:12] Index: 0
[12:18:13] Index: 1
[12:18:14] Index: 2
[12:18:15] Index: 3
[12:18:16] Index: 4
*/
for-of
заменить const entries = [1, 2, 3, 4];
for (let entry of entries) {...}
data-popup
можно заменить на element.dataset.popup
/********************************
* Подготовка
********************************/
const formData = new FormData();
formData.append('name', 'John Doe');
formData.append('email', 'john.doe@example.com');
formData.append('phone', '88005553535');
/********************************
* Сборка параметров
********************************/
const searchParams = new URLSearchParams();
for (let [key, value] of formData.entries()) {
searchParams.set(key, encodeURIComponent(value));
}
console.log(searchParams.toString()); // name=John%2520Doe&email=john.doe%2540example.com&phone=88005553535
request.send(searchParams.toString());
. А ещё можно делать так: new FormData(DOM_ЭЛЕМЕНТ_ФОРМЫ);
topSalary({
'John': 10000,
'Emily': 11000,
'Bob': 9200,
'Alice': 11010
}); // Alice
. Далее, max
для цифры, maxName
для ключа в объекте. Object.entries(salaries)
этот код из объекта делает массив массивов, такой: [['John', 10000], ['Emily', 11000], ['Bob', 9200], ['Alice', 11010]]
. Часть const [name, salary] of ...
это деструктурирующее присваивание, т. е. в name
попадает ключ, а в salary
число (в данном случае). Ну а дальше обычный алгоритм поиска максимального числа и возврат ключа (maxName
).