Самый короткий способ сделать объект перебираемым?

  1. Способ который я нашел тут 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);

→ Ссылка