範例如下
var arr1 = ["a","b"]; var arr2 = ["b", "c"]; var arr3 = arr1.concat(arr2);//合併後得到["a","b","b","c"]
但用 concat 合併,不會去除重複的元素。
可再自訂一個方法,將重複元素去除
Array.prototype.my_unique = function() { var a = this.concat();//使用concat()再複製一份陣列,避免影響原陣列 for(var i=0; i<a.length; ++i) { for(var j=i+1; j<a.length; ++j) { if(a[i] === a[j]) a.splice(j, 1); } } return a; }; //範例即可修改為 var arr1 = ["a","b"]; var arr2 = ["b", "c"]; var arr3 = arr1.concat(arr2).my_unique();//合併後得到["a","b","c"]
備註:
- 用 Array.prototype 新增一個方法,則所有的 array 都可使用。
- 用 Array.prototype 新增一個方法後,如果想要用 for... in... 的方式,遍歷所有的 array 元素,則會將自訂的方法也列出。例如
var arr=["one","two"]; for (var x in arr){ alert(arr[x]); //除了會列出one、two兩個元素,還會列出自訂的my_unique方法 }
所以用了 Array.prototype,若要訪問所有的 array 元素,則須用var arr=["one","two"]; var len=arr.length; for (var x=0; x<len; x++){ alert(arr[x]); //僅列出one、two兩個元素 }
- 若想避免 Array.prototype 對 for...in... 的影響,也可改寫成單純的 function 來使用
function my_unique(a) { var a = a.concat();//使用concat()再複製一份陣列,避免影響原陣列 for(var i=0; i<a.length; ++i) { for(var j=i+1; j<a.length; ++j) { if(a[i] === a[j]) a.splice(j, 1); } } return a; }; var arr1=["a","b"]; var arr2=["b","c"]; var arr3 = my_unique(arr1.concat(arr2));//得到["a","b","c"]
感謝有您
回覆刪除春暖花开
刪除