在Python中,[2]是一个列表,以下代码给出以下输出:

[2] * 5 # Outputs: [2,2,2,2,2]

是否存在一种简单的方法来做到这一点与JavaScript数组?

我写了下面的函数来实现它,但是有没有更短或更好的函数呢?

var repeatelem = function(elem, n){
    // returns an array with element elem repeated n times.
    var arr = [];

    for (var i = 0; i <= n; i++) {
        arr = arr.concat(elem);
    };

    return arr;
};

当前回答

改进了Vivek的答案,这适用于任何长度的字符串,填充一个长度为n的数组:array (n+1)。Join('[要重复的字符串][separator]').split('[separator]')。片(0,n)

其他回答

我有问题与提到的方法,当我使用数组像

var array = ['foo', 'bar', 'foobar'];
var filled = array.fill(7);

//filled should be ['foo', 'bar', 'foobar', 'foo', 'bar', 'foobar', 'foo']

为了得到这个,我使用:

Array.prototype.fill = function(val){
    var l = this.length;
    if(l < val){
        for(var i = val-1-l; i >= 0; i--){
            this[i+l] = this[i % l];
        }
    }
    return this;
};

我今天在尝试制作一个不使用循环的2D数组时发现了这一点。回想起来,加入一个新数组很简单;我尝试映射一个新数组,这不能作为映射跳过空槽。

"#".repeat(5).split('').map(x => 0)

“#”字符可以是任何有效的单个字符。 5是你想要的元素数量的变量。 7是你想要填充数组的值。

新的填充方法更好,当我编码这个我不知道它的存在,我也不知道repeat是es6;我打算写一篇博客,介绍如何将这个技巧与reduce结合起来做一些很酷的事情。

http://jburger.us.to/2016/07/14/functionally-create-a-2d-array/

这可能是另一个答案。

让卡=(“一个”、“2”、“3”、“4”、“5”、“6”、“7”、“8”,“9”,“10”、“J”,“问”、“K”);

let totalCards =[…]卡,…卡,…卡,……卡);

试试这个:

"avinash ".repeat(5).trim().split(" ");

你可以试试:

Array(6).join('a').split(''); // returns ['a','a','a','a','a'] (5 times)

更新(01/06/2018):

现在你可以有一组重复的字符。

new Array(5).fill('a'); // give the same result as above;
// or
Array.from({ length: 5 }).fill('a')

注意:查看更多关于fill(…)和from(…)的兼容性和浏览器支持。

更新(05/11/2019):

另一种方法,不使用fill或from,适用于任何长度的字符串:

Array.apply(null, Array(3)).map(_ => 'abc') // ['abc', 'abc', 'abc']

同上面的答案。为了完整而添加。