面試考題 2024 - 資料處理問題1(實作)
===

---
###### 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更明顯更好閱讀和更簡單些。

* 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!
