使用.fill()将值(n)多次添加到JavaScript数组中(.push())?

3

是否有可能使用.fill()来重复新添加的数组元素,而不是使用传统循环来执行复制?例如,使用.fill()。我看到的示例都是声明一个长度为nnew Array(),然后用一个值来填充它。但是,我没有看到任何处理.push()的示例,因此我甚至不确定是否可能。

我想要的示例:

var my_array = [];
for (var i = 0; i < 5; i++) {
    my_array.push(5);
};

场景:

我正在从三个不同的数组或对象中提取值来填充一个单矩阵,该矩阵将通过Munkres(匈牙利)算法运行,为了避免引入另一个循环,我想使用.push方法将值添加到矩阵中,并使用.fill()重复值n次。

例子:

var s = […];
var a = […];
var p = […];

var matrix = [];
for (var i = 0; i < s.length; i++) {
    var preferences = [];
    for (var j = 0; j < p.length; j++ {
        var pid = p[j];
        for (var k = 0; k < a.length; k++ {
            if (pid == a[k]) {
                for (var l = 0; l < 5; l++) {  // <-- THIS.
                    preferences.push(a[k]);
                };
            };
        };
    };
    matrix.push(preferences);
};

我认为你需要使用 fill,但不需要使用 push - push 返回数组的新长度。 - Jack Bashford
问题在于我需要将值“append”到“preferences”数组中,以便它们在每次迭代时都能保留。我认为如果我创建一个带有所需值的数组,并将其.push()到“preferences”数组中,那么结果将是[[ ],[ ],[ ]] - artomason
1个回答

8
您可以使用 concatfill 来实现:
preferences = preferences.concat(Array(5).fill(a[k]));

这里的区别在于 push 会直接改变数组,而 concat 不会。根据问题似乎需要对数组进行修改。 - Cory Danielson
循环结束后,这将导致一个空数组。 - artomason
1
抱歉 @artomason - 请尝试 preferences = preferences.concat(Array(5).fill(a[k])); - Jack Bashford
那个可行。如果你更新你的答案,我会接受它。 - artomason
没问题@artomason - 我会把它加入到我的答案中。如果我的答案解决了你的问题,请标记为已接受。 - Jack Bashford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接