К сожалению, это невозможно в JS (также невозможна перегрузка операторов, поэтому мы не можем использовать что-то вроде Array.prototype.__mul__
), но мы можем создать массив с нужной целевой длиной, заполнить заполнителями, а затем повторноотобразить значения:
const seqFill = (filler, multiplier) =>
Array(filler.length * multiplier)
.fill(1)
.map(
(_, i) => filler[i % filler.length]
);
console.log(seqFill([1,2,3], 3));
console.log(seqFill(['a','b','c', 'd'], 5));
Или, подключившись к прототипу Array, вы можете использовать синтаксис Array#seqFill(multiplier)
, это, вероятно, самый близкий к синтаксису ruby (может сделать rb).в основном все с перегрузкой операторов, но JS не может):
Object.defineProperty(Array.prototype, 'seqFill', {
enumerable: false,
value: function(multiplier) {
return Array(this.length * multiplier).fill(1).map((_, i) => this[i % this.length]);
}
});
console.log([1,2,3].seqFill(3));