---
# System prepended metadata

title: 面試考題 2024 - 資料處理問題1（實作

---

面試考題 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)