Javascript高效地将数组复制到索引处的另一个数组中
在javascript中,假设我有一个由n个项组成的预分配数组,我有另一个数组,我想在给定的起始索引处复制到第一个数组中,下面是一种方法: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
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万个条目,所以效率是我的首要任务。