如何串联任意数量的数组并返回指定数目的数组副本

时间:2019-04-06 03:34:27

标签: javascript

我正在尝试建立一个函数,该函数采用一个数组(作为第一个参数)和一个数字(作为第二个),该函数返回数组的副本与第二个参数中指定的数字一样多如果数组的第一个参数是[1,2,3],数字4是第二个参数,则函数应返回[1,2,3,1,2,3,1,2,3 1,2, 3]。预先感谢您的指导。

我已经在这个问题上停留了很长时间,并且我试图将数组彼此串联,但是它不起作用。当我运行我的代码时,我看到数组正在返回第二个参数上指定的数字,但是没有合并它们。我将如何去做?



function expand(array, number){
    let arr = [];
    for(var i = 0; i < number; i++){
      console.log(arr.concat(array));

    }

    return arr;
}






expand([1,2,3], 5)

// })

3 个答案:

答案 0 :(得分:2)

我喜欢这样做是为了简洁-在{while}循环中倒数只是push()。与concat不同,push()可以在适当的位置操作数组,而不是重新调整新数组:

function expand(array, number, res = []){
  while(number-->0) res.push(...array)
  return res
}

console.log(expand([1,2,3], 3))

如果您要使用新的flat(),也可以使用此单行代码:

const expand = (array, number) => Array(number).fill(array).flat()

console.log(expand([1, 2, 3], 3))

答案 1 :(得分:1)

您需要将Array.concat()返回的新数组分配回arr变量:

function expand(array, number)
{
    let arr = [];

    for (i = 0; i < number; i++)
    {
        arr = arr.concat(array);
    }
    
    return arr;
}

console.log(expand([1,2,3], 5));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

或者,您也可以使用递归方法:

function expand(array, number, res=[])
{
    return !number ? res : expand(array, number - 1, res.concat(array));
}

console.log(expand([1,2,3], 5));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

或者,如果您的数组仅包含数字,则也许可以将Array.from()与字符串实用程序String.repeat()结合使用:

function expand(array, number)
{
    return Array.from(array.join("").repeat(number), Number);
}

console.log(expand([1,2,3], 5));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

答案 2 :(得分:0)

您也可以尝试使用Array.prototype.push()

var arr1 = [1,2,3];
var n=4;

var arr2 = expandArray(arr1,4);
console.log(arr2);

function expandArray(arr1,n) {
  var arr3 = [];

  for (var i = 0; i<n;i++) {
    arr3.push(...arr1);

  }
  return arr3;

}