JS连接数组与替换

时间:2016-04-10 07:02:59

标签: javascript arrays

有两个阵列:

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;
}

2 个答案:

答案 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])