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

当前回答

这个函数创建一个长度为(length)的元素数组,只要(value)为整数或整数字符串,每个元素都等于(value)。任何十进制数都将被截断。如果你想要小数,用"parseFloat("替换"parseInt("

function fillArray(length, intValue) {
     var vals = (new Array(length + 1)).join(intValue + '|').split('|').slice(0,length);
     for(var i = 0; i < length; i += 1) {
         vals[i] = parseInt(vals[i]);
     }
     return vals;
}

例子:

fillArray(5, 7) // returns [7,7,7,7,7]
fillArray(5, 7.5) // returns [7,7,7,7,7]
fillArray(5, 200) // returns [200,200,200,200,200]

其他回答

如果你需要多次重复一个数组:

var arrayA = ['a','b','c'];
var repeats = 3;
var arrayB = Array.apply(null, {length: repeats * arrayA.length})
        .map(function(e,i){return arrayA[i % arrayA.length]});
// result: arrayB = ['a','b','c','a','b','c','a','b','c']

受到这个答案的启发

试试这个:

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

如果你正在使用一个多功能带,如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);