題目
寫一個 function,傳入兩個或兩個以上的數(shù)組,返回一個以給定的原始數(shù)組排序的不包含重復(fù)值的新數(shù)組。換句話說,所有數(shù)組中的所有值都應(yīng)該以原始順序被包含在內(nèi),但是在最終的數(shù)組中不包含重復(fù)值。非重復(fù)的數(shù)字應(yīng)該以它們原始的順序排序,但最終的數(shù)組不應(yīng)該以數(shù)字順序排序。請參照下面驗證判斷中的例子。如果你被卡住了,記得開大招 Read-Search-Ask。嘗試與他人結(jié)伴編程、編寫你自己的代碼。
這是一些對你有幫助的資源:
Arguments object
Array.reduce()
function unite(arr1, arr2, arr3) {
return arr1;
}
unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);
思路
- 我算是領(lǐng)教這出題人的文字組織水平了,看了半天懵逼狀態(tài);
- 后來看到下面的示例,才明白要的是啥
image.png - 不就是說,比對多個數(shù)組,去掉后一個數(shù)組中在前面已重復(fù)的數(shù),然后按照數(shù)組的順序而并不是按照數(shù)字的自然排序,存入一個新數(shù)組;
- 看了題目提示需要用到 這2個 Arguments object,Array.reduce();
- 于是開始學(xué)習(xí)這兩個函數(shù)的用法,發(fā)現(xiàn) Arguments object 比較有用,還可能會用到 contact,indexOf 等;
- 定義2個變量,先將所有數(shù)組合并存入一個變量,然后依次判斷當(dāng)前位置的數(shù)值是否已經(jīng)有存在,如果只出現(xiàn)一次,則存入另外一個變量
解答
function unite(arr1, arr2, arr3) {
var A = (Array.from(arguments)).reduce(function(prev,cur,index,array){
return prev.concat(cur); // 用arguments 轉(zhuǎn)換為數(shù)組后,合并 arrs 的所有數(shù)組;
});
var B =[] ;
for (var i =0; i<=A.length; i++){
if (A.indexOf(A[i]) === i){ // 意思是如果A 里面第一次出現(xiàn) A[i]的字符為的位置為i,也就是說,A[i]的數(shù)值只出現(xiàn)了一次
B.push(A[i]); // 就將這個唯一值存起來
}
}
return B;
}
unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);
- 上面有 判斷是否出現(xiàn)過幾次可以說一下:
比如: A = (1,3,2,4,3)
java script if (A.indexOf(A[i]) === i)
當(dāng) i = 1 時,第一次循環(huán),則A[i] 是 3,這個等式是 A.indexOf(A[1]) === 1 是成立的,所以3 會先存起來;當(dāng)循環(huán)到 i = 4 時, A[i] 還是 3,但 A.indexOf(A[4]) === 1 ,等式不成立;