在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;
};

当前回答

>>> Array.apply(null, Array(10)).map(function(){return 5})
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
>>> //Or in ES6
>>> [...Array(10)].map((_, i) => 5)
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]

其他回答

[c] * n可以写成:

Array(n+1).join(1).split('').map(function(){return c;})

对于[2]* 5

Array(6).join(1).split('').map(function(){return 2;})

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

>>> Array.apply(null, Array(10)).map(function(){return 5})
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
>>> //Or in ES6
>>> [...Array(10)].map((_, i) => 5)
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5]

如果需要重复一个数组,请使用下面的方法。

Array(3).fill(['a','b','c']).flat() 

将返回

Array(9) [ "a", "b", "c", "a", "b", "c", "a", "b", "c" ]

你也可以像这样扩展Array的功能:

Array.prototype.fill = function(val){
    for (var i = 0; i < this.length; i++){
        this[i] = val;
    }
    return this;
};
// used like:
var arry = new Array(5)​.fill(2);
// or
var arry = new Array(5);
arry.fill(2);


​console.log(arry);​ //[2, 2, 2, 2, 2] 

我应该指出,如果您使用第三方库,扩展内置对象的功能可能会导致问题。在做决定时一定要考虑到这一点。