Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在特定索引处合并两个数组_Javascript_Arrays_Merge - Fatal编程技术网

Javascript 在特定索引处合并两个数组

Javascript 在特定索引处合并两个数组,javascript,arrays,merge,Javascript,Arrays,Merge,假设我有一个名为array1: var array1 = [1, 2, 5]; var array2 = [3, 4]; 我还有另一个名字叫array2: var array1 = [1, 2, 5]; var array2 = [3, 4]; 我想通过在array1的索引号2处插入array2来输出结果[1,2,3,4,5]。 如何在JavaScript中实现这一点 编辑: var array1 = [1, 2, 5]; var array2 = [3, 4]; 更多需要注意的事项

假设我有一个名为array1:

var array1 = [1, 2, 5];
var array2 = [3, 4];
我还有另一个名字叫array2:

var array1 = [1, 2, 5];
var array2 = [3, 4];
我想通过在array1的索引号2处插入array2来输出结果
[1,2,3,4,5]

如何在JavaScript中实现这一点

编辑:

var array1 = [1, 2, 5];
var array2 = [3, 4];
更多需要注意的事项:

var array1 = [1, 2, 5];
var array2 = [3, 4];
  • 阵列突变到位并不重要,任何一种方法都可以
  • 数组元素的顺序无关紧要,手头的任务是在指定的索引处合并两个数组

我提出了一个可能的实现方案:

//在索引“i”处将“b”与“a”合并
函数合并(a、b、i=0){
返回a.slice(0,i).concat(b,a.slice(i));
}
var结果=合并([1,2,5],[3,4],2);

控制台日志(结果)如果目标只是订购:

array1.concat(array2).sort();
var array1=[1,2,5],
array2=[3,4];
设r=array1.concat(array2.sort();
控制台日志(r)
您可以尝试将
b
的元素添加到中,这将在索引
i
处添加一系列参数(可选参数删除将被
0
忽略)<代码>a
将就地修改并返回

const merge=(a,b,i=0)=>a.splice(i,0,…b)和&a;

log(合并([1,2,5],[3,4,2])如果不想改变原始数组,可以将切片分散到新数组中:

vararray1=[1,2,5];
var array2=[3,4];
函数合并(a1、a2、i){
返回[…a1.切片(0,i),…a2,…a1.切片(i)]
}
console.log(合并(array1、array2、2))
//负面索引也一样

console.log(merge(array1,array2,-2))
定义“优雅”,请分享您自己的尝试,并解释这些尝试是如何失败的。@DavidThomas我将问题改为“效率最高”,这是怎么回事?我还包括了一个可能的尝试,效率仍然很模糊——你是如何测量它的?时间复杂度可能是一个不那么模棱两可的指标,但也有其自身的问题?哪个JS引擎/版本/实现,什么机器规格,什么测试用例,等等?@ggorlen再次思考这个问题,我意识到效率会使这个问题变得过于复杂,所以我只要求不同的可能解决方案。这会改变传递到函数中的数组,
array1
将与合并后的
结果相同,我认为这是错误的。我在回答中提到了这一点。这个问题对参数的变异没有任何限制。哦,是的,我知道你提到了。即使没有限制,我认为这样做也是不好的做法。当您可以执行
merge(array1,array2,2)时,为什么还要麻烦从
merge
函数返回任何内容;控制台日志(array1)
then?OP回答了他们自己的问题,我希望我的函数能够像他们的示例一样工作,在线,并使用链接。是的,在所有情况下,改变参数都不是好的做法,但同样,这并不是问题的约束条件。如果效率是关键,你不介意变异,那么就要在<>代码> < < /代码>中使用<代码> b <代码>。JS的内置
array.sort
是一个就地函数的例子,它可以变异并返回arg数组(是的,这是一个原型函数)。@MarkMeyer啊,我想我在看到你的评论时编辑了你所说的:)这应该是一个非常可靠的答案。我认为这实际上是最优雅的一个,因为它在一行中执行整个操作,并且不改变输入数组。@mbj我同意这比其他方法更容易阅读,并且使用的代码更少。很好地使用了spread运算符而不是concat!这是我现在最喜欢的!:-)