Javascript高效地将数组复制到索引处的另一个数组中

Javascript高效地将数组复制到索引处的另一个数组中,javascript,arrays,copy,Javascript,Arrays,Copy,在javascript中,假设我有一个由n个项组成的预分配数组,我有另一个数组,我想在给定的起始索引处复制到第一个数组中,下面是一种方法: let arr = new Array(25); console.log(arr); let arrB = Array(5).fill(1); let insertAt = 5; for(let ix = 0; ix < arrB.length; ix++) arr[ix + insertAt] = arrB[ix]; console.log(a

在javascript中,假设我有一个由n个项组成的预分配数组,我有另一个数组,我想在给定的起始索引处复制到第一个数组中,下面是一种方法:

let arr = new Array(25);
console.log(arr);

let arrB = Array(5).fill(1);
let insertAt = 5;
for(let ix = 0; ix < arrB.length; ix++)
  arr[ix + insertAt] = arrB[ix];
console.log(arr);
是否有更有效/标准的方法来实现这一点

在C++中,我正在考虑与以下内容等效的内容: 试试看

arr.splice(insertAt,5, ...arrB)
设arr=newarray25; console.logarr; 设arrB=Array5.fill1; 设insertAt=5; arr.拼接插件,5,…arrB console.logarr 试一试

设arr=newarray25; console.logarr; 设arrB=Array5.fill1; 设insertAt=5; arr.拼接插件,5,…arrB
console.logarr 效率方面,我认为没有比你发布的代码更好的方法了。您需要检查数组中需要复制的所有项


我同意其他人的看法,使用slice可能是实现这一点的标准方法。

从效率角度看,我认为没有比您发布的代码更好的方法了。您需要检查数组中需要复制的所有项


我同意其他人的看法,使用slice可能是实现这一点的标准方法。

我最终制作了一个模块,以简化这一过程:

const checks = require("checks"); //NB, NOT ON NPM....

(()=>{
  Array.prototype.copyInto = function(arr,ix = 0){
    if(!checks.isArray(arr))
      throw new Error("'arr' argument must be an array");
    if(!checks.isInteger(ix) || ix < 0)
      throw new Error("'ix' must be a positive integer");
    for(let i = 0; i < arr.length; i++)
      this[ix+i] = arr[i];
    return this;
  }
})();

不确定这是否是正确的方法,但它对我有效。

我最终制作了一个模块来简化这一过程:

const checks = require("checks"); //NB, NOT ON NPM....

(()=>{
  Array.prototype.copyInto = function(arr,ix = 0){
    if(!checks.isArray(arr))
      throw new Error("'arr' argument must be an array");
    if(!checks.isInteger(ix) || ix < 0)
      throw new Error("'ix' must be a positive integer");
    for(let i = 0; i < arr.length; i++)
      this[ix+i] = arr[i];
    return this;
  }
})();

不确定这是否是正确的方法,但它对我有效。

不确定此代码的性能效率,因为我仍然是一名学习者,但建议将其作为实现此结果的另一种方式

let arr = new Array(25);
let arrB = Array(5).fill(1);
let insertAt = 5;

function copy(index) {
    if (arrB.length === 0 || index > 9) {
        return;
    }

    arr[index] = arrB.shift();
    copy(index + 1);
}

copy(insertAt);

由于我还是一名学习者,不确定该代码的性能效率如何,但建议将其作为实现该结果的另一种方式

let arr = new Array(25);
let arrB = Array(5).fill(1);
let insertAt = 5;

function copy(index) {
    if (arrB.length === 0 || index > 9) {
        return;
    }

    arr[index] = arrB.shift();
    copy(index + 1);
}

copy(insertAt);

阵列切片?splice应该适合您的使用情况有一些更简洁的选项,但我认为您将很难想出比这更有效的方法。谢谢Mark。上面的例子只是为了说明我的观点,在生产中,我有一个长度可能高达100万的数组,我可能需要插入100k个条目,所以效率是我的主要优先事项。数组切片?splice应该适合您的使用情况有一些更简洁的选项,但我认为您将很难想出比这更有效的方法。谢谢Mark。上面的例子只是为了说明我的观点,在生产中,我有一个长度可能高达100万的数组,我可能需要插入10万个条目,所以效率是我的首要任务。