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

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

本次須要考慮的問題:
一、數組降維
由於數組的維度是不肯定的,咱們須要作的是把兩個數組都轉換成一維數組。
在ES6中,提供了這麼一個方法數組

Array.prototype.flat()

在數組的層次不肯定時,能夠使用Infinity關鍵字做爲參數,即:測試

Array.prototype.flat(Infinity)

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

代碼以下:code

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, false) : map.set(ele, true)
    });
    for(let [key, val] of map.entries()){
        if(val){
            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));

結果:ip

[52, "52", 16, 17, 18]
相關文章
相關標籤/搜索