const foo = function foo(dateOrig) {
const date = new Date(dateOrig)
// код, который мутирует date и что-нибудь возвращает
}
const initFunc = (nums) => {
let i = 0;
const { length } = nums;
return (n) => n * nums[i++ % length];
}
const func = initFunc([5, 6, 9]);
console.log(func(2)); //10
console.log(func(2)); //12
console.log(func(2)); //18
console.log(func(2)); //10
Предстоит сложный проект
let btn = document.querySelector('.btn')
let circle = document.querySelector('.inner-circle')
let interval;
let fill = 433;
btn.addEventListener('mouseenter', () => {
clearInterval(interval);
interval = setInterval(() => {
if(fill < 5) {
fill = 0;
circle.style.strokeDashoffset = fill;
clearInterval(interval);
return;
}
fill -= 5;
circle.style.strokeDashoffset = fill;
}, 10);
});
btn.addEventListener('mouseleave', () => {
clearInterval(interval);
interval = setInterval(() => {
if(fill > 428) {
fill = 433;
circle.style.strokeDashoffset = fill;
clearInterval(interval);
return;
}
fill += 5;
circle.style.strokeDashoffset = fill;
}, 10);
});
.addEventListener(type, (event) => {
event.stopPropagation();
// code
}, true);
inp.value.indexOf('/')!=-1 // includes
inp.value.slice(-1)
inp.value.substring(0, inp.value.length - 1) // в честь чего тут субстринг, когда везде слайс используешь?
inp.value.slice(index - inp.value.length + 1) // для чего тут inp.value.length?
case 'multiply':
inp.value += item.innerText
break;
case 'division':
inp.value += item.innerText
break;
case 'sub':
inp.value += item.innerText
break;
case 'sum':
inp.value += item.innerText
break;
case 'dot':
inp.value += item.innerText
break;
// =
case 'multiply':
case 'division':
case 'sub':
case 'sum':
case 'dot':
inp.value += item.innerText
break;
if (inp.value.indexOf('*')!=-1) {
index = inp.value.indexOf('*')
inp.value = parseFloat(inp.value.slice(0, index)) * parseFloat(inp.value.slice(index - inp.value.length + 1))
} else if (inp.value.indexOf('/')!=-1) {
index = inp.value.indexOf('/')
inp.value = parseFloat(inp.value.slice(0, index))/parseFloat(inp.value.slice(index-inp.value.length+1))
} else if (inp.value.indexOf('-')!=-1) {
index = inp.value.indexOf('-')
inp.value = parseFloat(inp.value.slice(0, index))-parseFloat(inp.value.slice(index-inp.value.length+1))
} else if (inp.value.indexOf('+')!=-1) {
index = inp.value.indexOf('+')
inp.value = parseFloat(inp.value.slice(0, index))+parseFloat(inp.value.slice(index-inp.value.length+1))
}
function dataSort(arrayLabels, arrayData, ...rawParams) {
console.log(`number of arguments: ${params.length}`);
const getParams = (pIndex) => rawParams.reduce((acc, p, i) => {
acc[`arr${i}`] = p[pIndex] || '';
return acc;
}, {});
const arrayOfObj = arrayLabels
.map((label, i) => ({
labels: label,
data: arrayData[i],
...getParams(i),
}))
.sort((a, b) => b.data - a.data);
/* ... */
}
forEach, map, reduce, every, filter и т.д.
for, for..of, for..in
``
) используются не только в виде строк, но и как аргументы функции. Иными словами из-за такое действие преттиера предотвращает вот эту ситуацию:console.log()
`${123}dsa`
// =
console.log()`${123}dsa`
console.log
, которая в свою очередь вернёт андефайнд, а далее андефайнд будет использован как функция, что приведёт к:Uncaught TypeError: console.log() is not a function
console.log()
;`${123}dsa`
будет идентична такой:console.log();
`${123}dsa`;
и никакой ошибки не будет. URLSearchParams
сплитит по =
, поэтому первый ключ ─ это https://qna.habr.com/?test
. ['123456789', '1'], ['1234', '12345']
let strToNumb = a1.concat(a2).map(item => item.length).sort((a,b) => a-b);
return Math.max(...strToNumb) - Math.min(...strToNumb)
const arr1 = [[8, 12], [17, 22]];
const arr2 = [[5, 11], [14, 18], [20, 23]];
const result = arr1.reduce((acc, range1) => {
arr2.forEach((range2) => {
const rangeLength1 = range2[1] - range1[0];
const rangeLength2 = range1[1] - range2[0];
if(rangeLength1 < rangeLength2) {
if(rangeLength1 < 0) {
return;
}
acc.push([range1[0], range2[1]]);
return;
}
if(rangeLength2 < 0) {
return;
}
acc.push([range2[0], range1[1]]);
});
return acc;
}, []);
Object.entries(obj).sort((a, b) => b[1] - a[1]).slice(0, 5).map((e) => e[0]);
пробовал через new Set, но видимо не верно понял его работу.
DOP.reduce((acc, obj) => {
if(acc.findIndex((fobj) => fobj.NAME === obj.NAME && fobj.CODE === obj.CODE) === -1) {
acc.push(obj);
}
return acc;
}, []);