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, 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));

效果:

[52, "52", 16, 17, 18]
    原文作者:magic_xiang
    原文地址: https://segmentfault.com/a/1190000018246337
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞