在JavaScript中多次重复多个元素的数组

And*_*imm 20 javascript arrays repeat

在JavaScript中,如何以简洁的方式重复包含多个元素的数组?

在Ruby中,你可以做到

irb(main):001:0> ["a", "b", "c"] * 3
=> ["a", "b", "c", "a", "b", "c", "a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

我查了一下lodash库,没找到任何直接适用的东西.功能请求:重复数组.是一个将其添加到lodash的功能请求,以及给出的最佳解决方法

const arrayToRepeat = [1, 2, 3];
const numberOfRepeats = 3;
const repeatedArray = _.flatten(_.times(numberOfRepeats, _.constant(arrayToRepeat)));
Run Code Online (Sandbox Code Playgroud)

问题创建零填充JavaScript数组的最有效方法?创建一个具有相同元素重复多次的数组,专注于多次重复单个元素,而我想重复一个具有多个元素的数组.

使用维护良好的库是可以接受的.

Cer*_*nce 16

不需要任何库,您可以使用它Array.from来创建您想要重复的数组数组,然后展平使用[].concat和传播:

const makeRepeated = (arr, repeats) =>
  [].concat(...Array.from({ length: repeats }, () => arr));
  
console.log(makeRepeated([1, 2, 3], 2));
Run Code Online (Sandbox Code Playgroud)

在较新的浏览器上,您可以使用Array.prototype.flat而不是[].concat(...:

const makeRepeated = (arr, repeats) =>
  Array.from({ length: repeats }, () => arr).flat();
  
console.log(makeRepeated([1, 2, 3], 2));
Run Code Online (Sandbox Code Playgroud)

  • 我原本做到了,但我认为它的意图稍微不那么明确 (4认同)

ibr*_*rir 14

您可以使用Array构造函数及其fill方法将要重复的数组填充多次,然后将concat它们(子数组)填充到单个数组中:

const repeatedArray = [].concat(...Array(num).fill(arr));
Run Code Online (Sandbox Code Playgroud)

注意:在较旧的浏览器(ES6之前版本)上,您可以使用Function#apply模仿上面的其余语法(concat将作为参数传递给它的每个子数组调用):

var repeatedArray = [].concat.apply([], Array(num).fill(arr));
Run Code Online (Sandbox Code Playgroud)

例:

const arrayToRepeat = [1, 2, 3];
const numberOfRepeats = 3;

const repeatedArray = [].concat(...Array(numberOfRepeats).fill(arrayToRepeat));

console.log(repeatedArray);
Run Code Online (Sandbox Code Playgroud)


Sla*_*lai 9

递归替代:

const repeat = (a, n) => n-- ? a.concat(repeat(a, n)) : [];

console.log( repeat([1, 2], 3) )
Run Code Online (Sandbox Code Playgroud)


Gon*_*o.- 7

我的第一个想法是创建这样的函数

let repeat = (array, numberOfTimes) => Array(numberOfTimes).fill(array).reduce((a, b) => [...a, ...b], [])
console.log(repeat(["a", "b", "c"], 3))
Run Code Online (Sandbox Code Playgroud)

使用填充方法并减少

理想情况下,不是使用reduce,而是使用flatten, 但在浏览器中还没有支持