如题,已有两个数组
var array1 = ["a", "b"]; var array2 = ["c", "d"];
我要合并后变成下面这样:
var array= ["a", "b", "c", "d"];
应该用什么方法呢?
走同样的路,发现不同的人生
这里给出新的例子
var arr1 = ['a']; var arr2 = ['b', 'c']; var arr3 = ['c', ['d'], 'e', undefined, null];
代码段中修改部分前面以星号(*)标记出。
执行:arr1.concat(arr2, arr3); 返回:[ 'a', 'b', 'c', 'c', [ 'd' ], 'e', undefined, null ]
arr1.concat(arr2, arr3);
[ 'a', 'b', 'c', 'c', [ 'd' ], 'e', undefined, null ]
var concat = (function(){ // concat arr1 and arr2 without duplication. var concat_ = function(arr1, arr2) { for (var i=arr2.length-1;i>=0;i--) { arr1.indexOf(arr2[i]) === -1 ? arr1.push(arr2[i]) : 0; } }; // concat arbitrary arrays. // Instead of alter supplied arrays, return a new one. return function(arr) { var result = arr.slice(); for (var i=arguments.length-1;i>=1;i--) { concat_(result, arguments[i]); } return result; }; }());
执行:concat(arr1, arr2, arr3); 返回:[ 'a', null, undefined, 'e', [ 'd' ], 'c', 'b' ]
concat(arr1, arr2, arr3);
[ 'a', null, undefined, 'e', [ 'd' ], 'c', 'b' ]
这里的undefined可能由数组本身存在的undefined元素引起,也可能由于delete引起。
var concat = (function(){ // concat arr1 and arr2 without duplication. var concat_ = function(arr1, arr2) { for (var i=arr2.length-1;i>=0;i--) { * if (arr2[i] === undefined || arr2[i] === null) { * continue; * } arr1.indexOf(arr2[i]) === -1 ? arr1.push(arr2[i]) : 0; } }; // concat arbitrary arrays. // Instead of alter supplied arrays, return a new one. return function(arr) { var result = arr.slice(); for (var i=arguments.length-1;i>=1;i--) { concat_(result, arguments[i]); } return result; }; }());
执行:concat(arr1, arr2, arr3); 返回:[ 'a', 'e', [ 'd' ], 'c', 'b' ]
[ 'a', 'e', [ 'd' ], 'c', 'b' ]
执行:delete arr3[2]; concat(arr1, arr2, arr3); 返回:[ 'a', [ 'd' ], 'c', 'b' ]
delete arr3[2]; concat(arr1, arr2, arr3);
[ 'a', [ 'd' ], 'c', 'b' ]
var concat = (function(){ // concat arr1 and arr2 without duplication. var concat_ = function(arr1, arr2) { for (var i=arr2.length-1;i>=0;i--) { * // escape undefined and null element * if (arr2[i] === undefined || arr2[i] === null) { * continue; * } * // recursive deal with array element * // can also handle multi-level array wrapper * if (classof(arr2[i]) === 'Array') { * for (var j=arr2[i].length-1;j>=0;j--) { * concat_(arr1, arr2[i][j]); * } * continue; * } arr1.indexOf(arr2[i]) === -1 ? arr1.push(arr2[i]) : 0; } }; // concat arbitrary arrays. // Instead of alter supplied arrays, return a new one. return function(arr) { var result = arr.slice(); for (var i=arguments.length-1;i>=1;i--) { concat_(result, arguments[i]); } return result; }; }());
执行:concat(arr1, arr2, arr3) 返回:[ 'a', 'd', 'c', 'b' ] 该代码也能够处理多层数组的解析。
concat(arr1, arr2, arr3)
[ 'a', 'd', 'c', 'b' ]
Native Javascript的concat操作并不改变原始数组,因此在上面提供的方案中,也不对原数组进行修改,而是返回新的数组。 在github上创建了gist,欢迎修改指正。https://gist.github.com/4167036
var merge = function() { return Array.prototype.concat.apply([], arguments) } merge([1,2,4],[3,4],[5,6]); //[1, 2, 4, 3, 4, 5, 6]
另外,最好加个去重处理,像上面的例子会处理重复元素。
concat
(这段是凑字数的,请忽略。)
这里给出新的例子
代码段中修改部分前面以星号(*)标记出。
基本
执行:
arr1.concat(arr2, arr3);
返回:
[ 'a', 'b', 'c', 'c', [ 'd' ], 'e', undefined, null ]
考虑重复
执行:
concat(arr1, arr2, arr3);
返回:
[ 'a', null, undefined, 'e', [ 'd' ], 'c', 'b' ]
处理undefined和null
这里的undefined可能由数组本身存在的undefined元素引起,也可能由于delete引起。
执行:
concat(arr1, arr2, arr3);
返回:
[ 'a', 'e', [ 'd' ], 'c', 'b' ]
执行:
delete arr3[2]; concat(arr1, arr2, arr3);
返回:
[ 'a', [ 'd' ], 'c', 'b' ]
考虑数组
执行:
concat(arr1, arr2, arr3)
返回:
[ 'a', 'd', 'c', 'b' ]
该代码也能够处理多层数组的解析。
注意
Native Javascript的concat操作并不改变原始数组,因此在上面提供的方案中,也不对原数组进行修改,而是返回新的数组。
在github上创建了gist,欢迎修改指正。https://gist.github.com/4167036
另外,最好加个去重处理,像上面的例子会处理重复元素。
concat
(这段是凑字数的,请忽略。)