function* iterateArray(array) {
for (const entry of array) {
yield entry;
}
}
const numbers = [2, 4, 6, 8, 10];
const iterator = iterateArray(numbers);
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 4, done: false }
console.log(iterator.next()); // { value: 6, done: false }
// Дополнение
const adapter = iterator => () => {
const entry = iterator.next();
return entry.value;
};
const next = adapter(iterator);
console.log(next()); // 2
console.log(next()); // 4
console.log(next()); // 6
const iterator = array => {
let index = 0;
return () => {
const value = array[index];
if (index < array.length) {
index++;
}
return value;
};
}
const numbers = [2, 4, 6, 8, 10];
const next = iterator(numbers);
console.log(next()); // 2
console.log(next()); // 4
console.log(next()); // 6
undefined
как обозначение об окончании массива. Следовательно, во втором варианте можно проверять на undefined
и если получаем true
, значит проитерировали весь массив. Но что если undefined
будет значением массива? В этом случае генераторы всю работу делают за нас, т. к. дополнительно отдают флаг, который говорит о завершении. Конечно, можно в варианте без генератора также симулировать данное поведение, возвращая следующую структуру:{
value,
done: array.length === index
}
let links = document.querySelectorAll('.m-menu-link');
link.forEach(link => link.addEventListener(...));
// или
for (const link of links) {
link.addEventListener(...);
}
loop: false
или items: 2
.я ожидаю 2
single_slider.owlCarousel({
dots: false,
nav: true,
loop: true,
navText: '',
items: 5,
margin: 20
});
npm rebuild node-sass
. let projectFolder= require('path').basename(dist);
это на второй строке, где сама переменная dist
? filteredOptions() {
return filter(this.options, new RegExp(this.searchText, 'gi'));
},
filter
:const filter = (data, needle, store = []) => {
for (const entry of data) {
const branch = {
...entry,
children: []
};
const isValid = needle.test(entry.name);
if (entry.hasOwnProperty('children') && entry.children.length > 0) {
filter(entry.children, needle, branch.children);
if (branch.children > 0 || isValid) {
store.push(branch);
}
} else {
if (isValid) {
store.push(branch);
}
}
}
return store;
};
const options = [
{
name: 'Выход детали из строя в процессе эксплуатации',
value: null,
children: [
{
name: 'Увеличение зазора, люфт (дробь/стуки)',
value: 53
},
{
name: 'Обрыв детали',
value: 54
}
]
},
{
name: 'Поломка при установке',
value: null
},
{
name: 'Брак до установки',
value: null,
children: [
{
name: 'Недокомплект',
value: 55
},
{
name: 'Заводской брак (замятия, отсутствие резьбы, пробой пыльника и т.д.)',
value: 56
}
]
}
];
console.log(filter(options, new RegExp('детали', 'gi')));
/*
[
{
name: 'Выход детали из строя в процессе эксплуатации',
value: null,
children: [ { name: 'Обрыв детали', value: 54, children: [] } ]
}
]
*/
<input type="file">
, то всё это Вы можете получить. Если нет такой возможности - mime-types. function scrollTracking(entries) {}
const observer = new IntersectionObserver(scrollTracking, {
threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
});
observer.observe(YOUR_ELEMENT));