Javascript Data Structure Range

Description

Javascript Data Structure Range


const Range = function(start, end, step = 1) {
  this.start = start;//from   www.jav a 2s. c  o m
  this.end = end;
  step > 0 ? this.step = step : this.step = -step;
};

Range.prototype.size = function () {
  return (Math.abs(this.start - this.end) / this.step) + 1;
};

Range.prototype.each = function (callback) {
  if (this.start > this.end) {
    for (let i = this.start; i >= this.end; i -= this.step) {
      callback(i);
    }
  } else {
    for (let i = this.start; i <= this.end; i += this.step) {
      callback(i);
    }
  }
};

Range.prototype.includes = function (val) {
  if (this.start > this.end) {
    for (let i = this.start; i >= this.end; i -= this.step) {
      if (val === i) return true;
    }
  } else {
    for (let i = this.start; i <= this.end; i += this.step) {
      if (val === i) return true;
    }
  }
  return false;
};

// Test ...!! //

const range2 = new Range(1, 3, 2);
console.log(range2);
console.log('size', range2.size()); // 2
range2.each((input) => {
  console.log('element : ', input);
});
console.log(range2.includes(3)); // true;
console.log(range2.includes(0)); // false;
const range3 = new Range(1, 3, -2);
console.log(range3);
console.log('size', range3.size()); // 2
range3.each((input) => {
  console.log('element : ', input);
});
console.log(range3.includes(3)); // true;
console.log(range3.includes(0)); // false;

var range1 = new Range(100, 50, -5);
var range2 = new Range(56, 43);
var range3 = new Range(-5, 20);
console.log(range1, range2, range3);
console.log(range1.size(), range2.size(), range3.size());
console.log(range1.includes(95), range2.includes(57), range3.includes(5));

range1.each((val) => console.log(val));
range2.each((val) => console.log(val));
range3.each((val) => console.log(val));



PreviousNext

Related