面試考題 2024 - 資料處理問題1(實作) === ![image](https://hackmd.io/_uploads/ryWGwvg70.png) --- ###### tags: `面試問題`, `練習問題`, `2024` 面試官:“咳咳,前端嘛,總要懂一些資料處理的,問題來了。” 面試官:“**希望建立一個Function,傳入兩個Array,對第一個array取奇數,對第二個array取偶數,再合併成一個array回傳。**” 我:“hmmmm....ok!” ## 實作 ```jsx! function mergeArray (array1:[],array2:[]){ const oddNumArray = array1.filter(odd => odd % 2 !== 0); const evenNumArray = array2.filter(even => even % 2 === 0); const finalArray = oddNumArray.concat(evenNumArray); return finalArray; } const arr1 = [1,2,3,4,5]; const arr2 = [10,11,12,13,14]; const result = mergeArray(arr1,arr2); console.log(result); // Output: [1,3,5,10,12,14]; ``` * 先創建好一個function來處理奇數和偶數。 * 用filter把不要的東西篩選掉,**成為一個新的Array**。這裡要注意,為什麼不用forEach,for呢?用 forEach也可以push進一個新的array呀?因為forEach只是歷遍array而已,filter可以自動成為新的array,為什麼不用叻。 * 然後拿取第一個array用 concat的方式,把剩餘的array排入組合成一個新的array!沒錯,當然我們也能用淺拷貝,或上個文章提到的深拷貝。但Concat更明顯更好閱讀和更簡單些。 ![image](https://hackmd.io/_uploads/rJf5e3-QR.png) * Concat 可以一口氣放入多個array,且不會影響其排列喔,重點是它是新的array!不會像淺拷貝會影響指定對象。 ## 進階版 ```jsx! function filterAndMerge(oddArrays,evenArrays){ const oddNumbes = oddArrays.reduce((acc,arr) =>{ return acc.concat(arr.filter(x=> x % 2 !== 0)); },[]); const evenNumbers = evenArray.reduce((acc,arr)=>{ return acc.concat(arr.filter(x=> x % 2 === 0)) },[]); const combined = oddNumbers.concat(evenNumbers); return combined; } const arr1 = [1, 2, 3, 4, 5]; const arr2 = [6, 7, 8, 9, 10]; const arr3 = [11, 12, 13, 14, 15]; const arr4 = [16, 17, 18, 19, 20]; const arr5 = [21, 22, 23, 24, 25]; const arr6 = [26, 27, 28, 29, 30]; const arr7 = [31, 32, 33, 34, 35]; // 假设我们决定 arr1, arr3, arr5, arr7 需要筛选奇数 // arr2, arr4, arr6 需要筛选偶数 const oddArrays = [arr1, arr3, arr5, arr7]; const evenArrays = [arr2, arr4, arr6]; const result = filterAndMerge(oddArrays, evenArrays); console.log(result); // 将输出一个包含所有指定奇数和偶数的新数组 ``` * 這裡比較大的變化是用 可以納入多個 Array。 * 利用 reduce 結合所有的 Array,然後再添加到一個 Array 裡。 * 當然在添加成一個 Array 之前呢,先用 filter 把應該可以放入篩選掉。 我覺得這樣應該算是比較進階版本的Array處理。但好像怎麼樣都要先處理好分為兩個Array組合再丟進function做分類。當然一定會有更完善的做法,但目前先這樣吧。 這個是在某家公司的考題之一,希望這樣的考題能啟發大家的思維。大家面試加油!Peace! ![image alt](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExYXg4Znc1MDNtYnZydXE0aDNxNmh0dnhscjU3YzhpcmJjaHVwMjJjaiZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/fxe8v45NNXFd4jdaNI/giphy.gif)