Вроде бы понятно, что префиксы(--i, ++i) быстрее постфиксов(i--, i++)
Когда-то и где-то читал, что лучший пробег - это с конца до начала, используя конструкцию:
for(let i = array.length - 1; i >= 0; --i)
for(let i = 0; i < array.length; ++i) let value = array[i]
(function() {
'use strict';
const formItems = document.querySelectorAll('.form .form__item');
const formRadios = formItems.forEach(item => item.querySelectorAll('.form__label'))
const formProgressLine = document.querySelector('.form .form__progress .form__progress-line');
const formProgressStart = 100 / formItems.length;
const result = document.querySelector('.result');
setTimeout(() => {
formProgressLine.style.width = `${formProgressStart}%`;
}, 0);
formRadios.slice(0, 2).forEach((formRadio, formRadioIndex) => {
formRadios.forEach(radio => {
radio.addEventListener('click', () => {
setTimeout(() => {
formItems[formRadioIndex].classList.remove('form__item--active');
formItems[formRadioIndex + 1].classList.add('form__item--active');
}, 1000);
formProgressLine.style.width = `${formProgressStart * (formRadioIndex + 2)}%`;
});
});
})
formRadios[2].forEach(radio => {
radio.addEventListener('click', () => {
setTimeout(() => {
form.style.display = 'none'
result.classList.add('result--active');
}, 1000);
});
});
})();
const wrapFilters = ',1,2,3'.split(',').map(v => document.querySelector('.wrap__filter' + v))
const filters = Array.from(['one', 'two', 'three', 'four'],
(v, ind) => document.querySelector('.filter__' + v).addEventListener('click', () => {
wrapFilters.forEach((wrapFilter, wrapIndex) => {
const methodName = index === wrapIndex ? 'toggle' : 'remove'
wrapFilter.classList[methodName]('opened')
})
}))
const wrapFilters = document.querySelectorAll('.wrap__filter')
const filters = Array.from(document.querySelector('.filter')).forEach((el, ind) => {
el.addEventListener('click', () => {
wrapFilters.forEach((wrapFilter, wrapIndex) => {
const methodName = index === wrapIndex ? 'toggle' : 'remove'
wrapFilter.classList[methodName]('opened')
})
})
})
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
}
render() {
return <div className={"someClass"} ref={this.myRef} />;
}
}
const getTopIndexes = (arr, count) => {
return arr.reduce((topIndexes, v, i, arr) => {
let insertIndex = topIndexes.length
for (let ind = topIndexes.length - 1; ind >= 0; ind --)
if (v > arr[topIndexes[ind]]) insertIndex = ind
else break
topIndexes.splice(insertIndex, 0, i)
return topIndexes.slice(0, count)
}, [])
}
console.log(getTopIndexes([-7, 2, 7, 5, 1, 4, -5, 7], 3)) // 2, 7, 3
function subscribe (ind = 0) {
request.post({
url: 'https://example.com',
form: {list: mis[ind]}
}, (err, response, body) => {
console.log(response.statusCode)
if (response.statusCode == 200)
subscribe (ind + 1)
})
}
subscribe()
const App = () => {
const [showComponent, changeShowComponent] = useState(0)
return <div>
<button onClick={() => changeShowComponent(1)}>Начинаем</button>
{showComponent === 1 && <FirstModalComponent changeShowComponent />}
{showComponent === 2 && <SecondModalComponent changeShowComponent />}
</div>
}
changeShowComponent(2)
и все перерисуется, первый компонент исчезнет, второй появится function createTree(data, defaultId, parentIds = '') {
const ul = document.createElement("ul");
data.map((item, index) => {
const li = document.createElement("li");
const id = [parentIds, item.id].join('_')
li.textContent = id;
if (item.children) {
li.appendChild(createTree(item.children, index, id));
}
ul.appendChild(li);
});
return ul;
}
const extendMe = ({prototype: childProto}, {prototype: parentProto}) => {
for (const key of Object.getOwnPropertyNames(parentProto)) {
if (!(key in childProto)) {
childProto[key] = parentProto[key]
}
}
}
class Animal {
name () { return 'Животное' }
legs () { return undefined }
get isAnimal () {
return true
}
}
class Cat {
name () { return 'Котик' }
legs () { return 15 }
}
const cat = new Cat()
console.log(cat.isAnimal) //undefined
extendMe(Cat, Animal)
console.log(cat.isAnimal) // true
// Просто храним все значения left в массиве
const switchActiveStyles = [
[0, 1000, 2000, 3000, 4000],
[-1000, 0, 1000, 2000, 3000],
// и т.д.
]
const activeSwitcherClassName = 'active-switcher'
function activeSwitcherFinder() {
// Перебор не нужен, активный максимум один
const active = arr_btn.find(({ classList }) => classList.contains(activeSwitcherClassName))
if (active) active.remove(activeSwitcherClassName)
}
// Найти все можем в цикле
const arr_btn = Array.from([,,,,,], (_, ind) => document.querySelector('.mod-' + ind))
const arr_wraps = Array.from([,,,,,], (_, ind) => document.querySelector('.display-wrap_' + ind))
arr_btn.forEach((btn, ind) => {
btn.onclick = () => {
activeSwitcherFinder()
btn.classList.add('active-switcher')
// Получаем соответствующий набор значений для left И устанавливаем в цикле
switchActiveStyles[ind].forEach((style, ind) => {
arr_wraps[ind].style.left = style + 'px'
})
}
})