题目大概意思:给定两个维度不肯定的数组,求它们之间不重复的数据合集,返回一个新数组
(备:在当时的题目,并无说明数组中数据的准确类型,本次采用了字符串和数值混合的数据来测试)
如给定:
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]