如何连接任意数量的数组并返回指定数量的数组副本



我正在尝试设置一个函数,该函数接受一个数组(作为第一个参数(和一个数字(作为第二个参数(,该函数返回数组的副本与第二个参数中指定的数字一样多(即,如果数组在第一个参数中是 [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)
// })

我喜欢这个简洁 - 只是在一段时间循环倒计时时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))

您需要将 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;}

您也可以

尝试使用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;
}

最新更新