如何“重复”一个数组n次

时间:2019-02-28 22:28:01

标签: javascript arrays

在python中,您可以执行以下操作:

arr = [1,2,3] * 3
print(arr)

输出:

[1,2,3,1,2,3,1,2,3]

在Java脚本中是否有一种简洁的方法?我能想到的最好的东西是:

let arr2 = [...arr, ...arr, ...arr]

但是如果我想做100次,那将是不切实际的。在python中,我会将其乘以100。

6 个答案:

答案 0 :(得分:6)

您可以这样做:

var repeated = [].concat(... new Array(100).fill([1, 2, 3]));

这将创建给定长度的数组(此处为100),并使用要重复的数组([1, 2, 3])将其填充。然后将该数组作为参数列表传播到[].concat()

哦,等一下

var repeated = new Array(100).fill([1, 2, 3]).flat();

会短一些。

答案 1 :(得分:6)

使用Array.from()创建一个长度为乘数的数组,其中每个项目都包含原始数组。然后使用Array.flat()转换为单个数组:

const multiplyArray = (arr, length) => 
  Array.from({ length }, () => arr).flat()

const arr = [1,2,3]
const arr2 = multiplyArray(arr, 3)

console.log(arr2)

答案 2 :(得分:3)

您可以创建具有所需长度的数组并映射值。

var array = [1, 2, 3],
    result = Array.from({ length: 3 * array.length }, (_, i) => array[i % array.length]);

console.log(result);

答案 3 :(得分:1)

一种快速的方法是加入数组,使用string.repeat()重复该数组,然后将其拆分,最后使用ES6 Spreads

另一个答案可能更好。这只是一个简单的单线。

let arr = [1, 2, 3];
let res = [...arr.join("").repeat(3).split("").map(Number)];

console.log(res);

答案 4 :(得分:0)

简单明了:

    var n=4; //times //put 100
    var array = [1,2,3];
    var newarray = [];
    while(n--){ var newarray = newarray.concat(array); }
    alert(newarray);

答案 5 :(得分:-1)

尝试一下:

function fillArray(value, len) {
    if (len == 0) return [];
        var a = [value];
        while (a.length * 2 <= len) a = a.concat(a);
    if (a.length < len) a = a.concat(a.slice(0, len - a.length));
        return a;
}

它在每次迭代中将数组加倍,因此它可以创建很少迭代的非常大的数组。