問題:
寫一個(gè) function饼问,傳入兩個(gè)或兩個(gè)以上的數(shù)組,返回一個(gè)以給定的原始數(shù)組排序的不包含重復(fù)值的新數(shù)組揭斧。
換句話說莱革,所有數(shù)組中的所有值都應(yīng)該以原始順序被包含在內(nèi),但是在最終的數(shù)組中不包含重復(fù)值讹开。
非重復(fù)的數(shù)字應(yīng)該以它們?cè)嫉捻樞蚺判蛑咽樱罱K的數(shù)組不應(yīng)該以數(shù)字順序排序。
代碼:
function unite(arr1, arr2, arr3) {
? ? var arrs = Array.from(arguments);//將arguments轉(zhuǎn)化為數(shù)組
? ? var arr=[];
? ? for(var i=0;i<arrs.length;i++){
? ? ? arr=arr.concat(arrs[i]);//將幾個(gè)數(shù)組合并
? ? }
? ? var answer=[];
? ? for(i=0;i<arr.length;i++){
? ? ? if(arr.indexOf(arr[i])==i){
? ? ? ?//如果第一次出現(xiàn)arr[i]的位置為i萧吠,表示arr[i]到現(xiàn)在為止只出現(xiàn)一次
? ? ? ? answer.push(arr[i]);
? ? ? }
? ? }
? ? return answer;
}
思路:
首先將arguments轉(zhuǎn)化為數(shù)組左冬,然后使用concat()方法將數(shù)組合并。合并完成后對(duì)數(shù)組進(jìn)行去重處理纸型,這里使用的方法是利用indexOf()方法得到每個(gè)字符最初出現(xiàn)的位置拇砰,如果與當(dāng)前位置相同則表示第一次出現(xiàn),將字符存入結(jié)果中狰腌,如果不相同則表示之前出現(xiàn)過除破。
ps:
arguments是一個(gè)類似數(shù)組的對(duì)象, 對(duì)應(yīng)于傳遞給函數(shù)的參數(shù)。
深入理解indexOf()方法琼腔,利用indexOf()做去重處理比較方便瑰枫,如果可以改變數(shù)組順序可以先利用sort()方法將數(shù)組排序然后判斷相鄰字符是否相等以此達(dá)到去重的目的。