有两个阵列:
var arr1 = ["a", "b", "c"];
var arr2 = ["k", ,"l","m","n"];
需要一些返回的标准函数:
var arr3=["k","b","l"];
这个太慢了:
function join_arrays(arr1,arr2)
{
var arr3=[];
for(var i=0;i<arr1.length;i++)
if(arr2[i]==undefined)
arr3[i]=arr1[i];
else
arr3[i]=arr2[i];
return arr3;
}
答案 0 :(得分:0)
您可以执行以下操作:
var arr1 = ["a", "b", "c"];
var arr2 = ["k",undefined,"l","m","n"];
var arr3 = [];
function join_arrays(arr1,arr2){
arr3 = arr2;
var i = arr3.indexOf(undefined);
while(i !=- 1){
arr3[i] = arr1[i];
i = arr3.indexOf(undefined);
}
return arr3;
}
然而,这里有一点需要注意,就我在JSBin中的测试向我展示的那样,你必须设置空值才能明确地替换为undefined
,就像我在我的例子中所做的那样。如果这对你来说不是最佳的,那么可能会有比我在这里展示的更好的方式。
希望这比代码运行得更快,因为它只会根据需要多次循环执行替换,并立即用arr3
填充arr2
。
<强>更新强>
请记住,虽然上面的函数有效,但它是不安全的,因为当第二个数组在第一个数组中没有的索引中有空元素时,它将导致错误。因此你可以这样做:
function join_arrays(arr1,arr2){
arr3=arr2;
var i = arr3.indexOf(undefined);
while(i!=-1 && i<arr1.length){
arr3[i]=arr1[i];
i=arr3.indexOf(undefined);
}
return arr3;
}
因此,使用此方法var arr2 = ["k",undefined,undefined,"l","m","n",undefined]
结果将为["k", "b", "c", "l", "m", "n", undefined]
,而不是出现错误或无限循环!
答案 1 :(得分:0)
使用标准功能,可以更快。
let arr1 = ["a", "b", "c"];
let arr2 = ["k", ,"l","m","n"];
arr1.map((e,i)=>arr2[i]==undefined?e:arr2[i])