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

当前回答

如果你正在使用一个多功能带,如lodash/下划线,你可以这样做:)

let result = _.map(_.times(foo), function() {return bar})

其他回答

没有更简单的方法了。您需要创建一个循环并将元素推入数组。

如果你正在使用一个多功能带,如lodash/下划线,你可以这样做:)

let result = _.map(_.times(foo), function() {return bar})

在洛达什,情况没那么糟:

_.flatten(_.times(5, function () { return [2]; }));
// [2, 2, 2, 2, 2]

编辑:更好的是:

_.times(5, _.constant(2));
// [2, 2, 2, 2, 2]

编辑:更好的是:

_.fill(Array(5), 2);
>>> 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]

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

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