Самый короткий способ сделать объект перебираемым?
- Способ который я нашел тут https://learn.javascript.ru/
let range = {
from: 1,
to: 5,
};
range[Symbol.iterator] = function(){
return {
d: this.from,
s: this.to,
next() {
if( this.d <= this.s ){
return {done: false, value: this.d++}
} else{
return {done: true};
}
}
}
}
let arr = Array.from(range);
console.log( arr );
Ответы (2 шт):
Автор решения: renich
→ Ссылка
Работает в оба направления: увеличение (increment), уменьшение (decrement).
ES6:
Object.prototype.range = function() {
let diff = this.to - this.from;
let sign = Math.sign(diff);
return Array(...new Array(sign * diff + 1)).map((x, i) => (this.from + i * sign));
};
let range = {
from: 3,
to: -5
};
let arr = range.range();
console.log(arr);
ES5:
Object.prototype.range = function() {
var diff = this.to - this.from;
var sign = Math.sign(diff);
return Array.apply(null, Array(sign * diff + 1)).map(function(x, i) { return this.from + i * sign}.bind(this));
};
var range = {
from: 5,
to: -3
};
var arr = range.range();
console.log(arr);
Автор решения: Денис Степанов
→ Ссылка
let range = {
from: 1,
to: 5,
};
range[Symbol.iterator] = function() {
return Object.entries(this).values()
}
let arr = Array.from(range);
console.log(arr);
let range = {
from: 5,
to: 10,
};
range[Symbol.iterator] = function() {
return Array.from({length: this.to - this.from + 1}, (_, n) => this.from + n).values();
}
let arr = Array.from(range);
console.log(arr);