CVTE2109春招筆試第一場前端編程題

題目大概意思:給定兩個維度不確定的數組,求它們之間不重複的數據合集,返回一個新數組
(備:在當時的題目,並沒有說明數組中數據的準確類型,本次採用了字符串和數值混合的數據來測試)
如給定:
arr1 = [11, 25, 44, [52, 44, 23], '52']
arr2 = [16, 25, 17, [11, 25, [23, 18]]]
返回:[52, "52", 16, 17, 18]

本次需要考慮的問題:
1、數組降維
因爲數組的維度是不確定的,我們需要做的是把兩個數組都轉換成一維數組。
在ES6中,提供了這麼一個方法

Array.prototype.flat()

在數組的層次不確定時,可以使用Infinity關鍵字作爲參數,即:

Array.prototype.flat(Infinity)

2、使用對象來判斷數據出現的次數
本次需要的數據是:兩個數組合並後只出現一次的數據,這裏我想到的是採用對象的鍵值對方法,但是由於普通對象的鍵是字符串類型,對於數組中同時出現字符串和數值類型則無法判斷,所以我採用Map集合來存儲數據,Map集合是ES6提供的一個完整的hash結構,鍵可以是任意類型

代碼如下:

function fn(arr1, arr2){
    let map = new Map();
    let res = [];
    let arr = arr1.flat(Infinity).concat(arr2.flat(Infinity));
    arr.forEach(ele => {
        map.has(ele) ? map.set(ele, -1) : map.set(ele, 1)
    });
    for(let [key, val] of map.entries()){
        if(val === 1){
            res.push(key);
        }
    }
    return res;
}

測試代碼:

let arr1 = [11, 25, 44, [52, 44, 23], '52'];
let arr2 = [16, 25, 17, [11, 25, [23, 18]]];
console.log(fn(arr1, arr2));

結果:

[52, "52", 16, 17, 18]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章