const getCharsUntilNumbers = string => string.match(/^([a-z]+)/i)?.[0];
console.log(getCharsUntilNumbers('dev05_dddd')); // 'dev'
console.log(getCharsUntilNumbers('01')); // undefined
console.log(getCharsUntilNumbers('de06')); // 'de'
- a9.forEach(function(elem) {
- elem.toLowerCase();
- });
-
- return a9;
+ return a9.map(function (elem) {
+ return elem.toLowerCase();
+ });
- a9.forEach(function(elem) {
- elem.toLowerCase();
- });
+ a9.forEach(function(elem, i, arr) {
+ arr[i] = elem.toLowerCase();
+ });
- a9.forEach(function(elem) {
- elem.toLowerCase();
- });
+ for (let index = 0; index < a9.length; index++) {
+ a9[index] = a9[index].toLowerCase();
+ }
const handleIndicatorChangeOne = (event) => {
setValue(values => [Number(event.target.value) || '', values[1]]);
};
const handleIndicatorChangeTwo = (event) => {
setValue(values => [values[0], Number(event.target.value) || '']);
};
onChange
у TextField
необходимо поменять на handleIndicatorChangeOne
и handleIndicatorChangeTwo
. const singleBusinessLogic = (() => {
let isBusy = false;
let promise = null;
let done = null;
let failure = null;
return (id) => {
if (!isBusy) {
isBusy = true;
promise = new Promise((resolve, reject) => ([done, failure] = [resolve, reject]));
fetch(`https://jsonplaceholder.typicode.com/users/${id}`)
.then(response => response.json())
.then(done)
.catch(failure)
.finally(() => (isBusy = false));
}
return promise;
};
})();
(async () => {
console.log(await singleBusinessLogic(1)); // { ..., name: 'Leanne Graham', ... }
console.log(await singleBusinessLogic(2)); // { ..., name: 'Leanne Graham', ... }
setTimeout(async () => {
console.log(await singleBusinessLogic(3)); // { ..., name: 'Clementine Bauch', ... }
console.log(await singleBusinessLogic(4)); // { ..., name: 'Clementine Bauch', ... }
});
})();
printNumbers(1, 5);
function printNumbers(from, to) {
let current = from;
let timerId = setTimeout(function go() {
timerId = setTimeout(go, 1000);
console.log(`current: ${current}`);
if (current === to) {
clearTimeout(timerId);
}
current++;
}, 1000);
}
async function start() {
const user = await getUser();
console.log(user);
}
function getUser() {
return fetch('https://jsonplaceholder.typicode.com/users/1')
.then(response => response.json());
}
start();
/*
{
id: 1,
name: 'Leanne Graham',
username: 'Bret',
email: 'Sincere@april.biz',
address: {
street: 'Kulas Light',
suite: 'Apt. 556',
city: 'Gwenborough',
zipcode: '92998-3874',
geo: { lat: '-37.3159', lng: '81.1496' }
},
phone: '1-770-736-8031 x56442',
website: 'hildegard.org',
company: {
name: 'Romaguera-Crona',
catchPhrase: 'Multi-layered client-server neural-net',
bs: 'harness real-time e-markets'
}
}
*/
async function start() {
const user = await getUser();
console.log(user);
}
function getUser() {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/users/1');
xhr.addEventListener('load', () => {
if (xhr.status === 200) {
resolve(JSON.parse(xhr.response));
} else {
reject(xhr.response);
}
});
xhr.send();
});
}
function start() {
getUser(user => {
console.log(user);
});
}
function getUser(callback) {
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/users/1');
xhr.addEventListener('load', () => {
if (xhr.status === 200) {
callback(JSON.parse(xhr.response));
} else {
callback(xhr.response);
}
});
xhr.send();
}
start();
function start() {
getUser((error, user) => {
if (!error) {
console.log(user);
}
});
}
function getUser(callback) {
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://jsonplaceholder.typicode.com/users/1');
xhr.addEventListener('load', () => {
if (xhr.status === 200) {
callback(null, JSON.parse(xhr.response));
} else {
callback(new Error(xhr.response));
}
});
xhr.send();
}
start();
[].toString() + true + false - null
"" + true // "true"
"" + true + false // "truefalse"
"" + true + false - null // NaN
+
не строка, то это не конкатенация и true, false, null будут преобразованы к числам.true + false - null + [].toString()
1 + 0 // 1
1 + 0 - 0 // 1
1 + 0 - 0 + "" // "1"
const lerp = (min, max, value) => (1 - value) * min + value * max;
const LEVELS = 10;
const MAX_EXPERIENCE = 600000;
const multipliers = [];
for (let index = 0; index < LEVELS - 1; index++) {
multipliers.push(
lerp(1, 2, index / LEVELS)
);
}
const total = multipliers.reduce((total, value) => total + value, 0);
const step = MAX_EXPERIENCE / total;
const { levels } = multipliers.reduce((store, multiplier, index) => {
const experience = step * multiplier;
store.levels.push({
level: index + 1,
experience: {
current: store.total,
next: store.total + experience,
need: experience
}
});
store.total += experience;
if (index + 1 === LEVELS - 1) {
store.levels.push({
level: LEVELS,
experience: {
current: store.total
}
});
}
return store;
}, { levels: [], total: 0 });
console.log(levels);
/*
[
{
level: 1,
experience: { current: 0, next: 47619.04761904762, need: 47619.04761904762 }
},
{
level: 2,
experience: { current: 47619.04761904762, next: 100000, need: 52380.95238095238 }
},
{
level: 3,
experience: { current: 100000, next: 157142.85714285716, need: 57142.85714285715 }
},
{
level: 4,
experience: { current: 157142.85714285716, next: 219047.61904761905, need: 61904.761904761894 }
},
{
level: 5,
experience: { current: 219047.61904761905, next: 285714.2857142857, need: 66666.66666666666 }
},
{
level: 6,
experience: { current: 285714.2857142857, next: 357142.8571428571, need: 71428.57142857142 }
},
{
level: 7,
experience: { current: 357142.8571428571, next: 433333.3333333333, need: 76190.4761904762 }
},
{
level: 8,
experience: { current: 433333.3333333333, next: 514285.71428571426, need: 80952.38095238095 }
},
{
level: 9,
experience: { current: 514285.71428571426, next: 600000, need: 85714.28571428571 }
},
{
level: 10,
experience: { current: 600000 }
}
]
*/
const lerp = (min, max, value) => (1 - value) * min + value * max;
const easeInCubic = value => value * value * value;
const LEVELS = 10;
const MAX_EXPERIENCE = 600000;
const multipliers = [];
for (let index = 0; index < LEVELS - 1; index++) {
multipliers.push(
lerp(1, 2, easeInCubic(index / LEVELS))
);
}
const total = multipliers.reduce((total, value) => total + value, 0);
const step = MAX_EXPERIENCE / total;
const { levels } = multipliers.reduce((store, multiplier, index) => {
const experience = step * multiplier;
store.levels.push({
level: index + 1,
experience: {
current: store.total,
next: store.total + experience,
need: experience
}
});
store.total += experience;
if (index + 1 === LEVELS - 1) {
store.levels.push({
level: LEVELS,
experience: {
current: store.total
}
});
}
return store;
}, { levels: [], total: 0 });
console.log(levels);
/*
[
{
level: 1,
experience: { current: 0, next: 58275.058275058276, need: 58275.058275058276 }
},
{
level: 2,
experience: { current: 58275.058275058276, next: 116608.3916083916, need: 58333.33333333333 }
},
{
level: 3,
experience: { current: 116608.3916083916, next: 175349.65034965036, need: 58741.258741258745 }
},
{
level: 4,
experience: { current: 175349.65034965036, next: 235198.13519813522, need: 59848.48484848485 }
},
{
level: 5,
experience: { current: 235198.13519813522, next: 297202.79720279726, need: 62004.66200466201 }
},
{
level: 6,
experience: { current: 297202.79720279726, next: 362762.2377622378, need: 65559.44055944055 }
},
{
level: 7,
experience: { current: 362762.2377622378, next: 433624.70862470864, need: 70862.47086247086 }
},
{
level: 8,
experience: { current: 433624.70862470864, next: 511888.1118881119, need: 78263.40326340326 }
},
{
level: 9,
experience: { current: 511888.1118881119, next: 600000, need: 88111.88811188811 }
},
{
level: 10,
experience: { current: 600000 }
}
]
*/
const { src, dest, series } = require('gulp');
const through = require('through2');
const transformToJson = () => {
return src('./src/settings.js')
.pipe(through.obj((file, _, callback) => {
const computed = require(file.path);
file.extname = '.json';
file.contents = Buffer.from(JSON.stringify(computed, null, 4));
callback(null, file);
}))
.pipe(dest('./dist'));
};
module.exports.default = series(transformToJson);
.event {
width: 300px;
height: 100px;
&__caption {
color: blue;
}
&__description {
color: green;
}
}
@media screen and (max-width: 768px) {
.event {
&__caption {
color: red;
}
}
}
.event {
width: 300px;
height: 100px;
&__caption {
color: blue;
@media screen and (max-width: 768px) {
color: red;
}
}
&__description {
color: green;
}
}
const button = document.querySelector('.reset');
button.addEventListener('click', () => {
document.querySelectorAll('.active').forEach(element => element.classList.remove('active'));
});
<div class="reset">сброс цвета</div>
заменить на <button type="button" class="reset">сброс цвета</button>