-
数组扁平化 : 多维(嵌套)数组 转换为 一个数组
- 使用flat()
- 利用正则
- 使用reduce
- 函数递归
-
数组去重
- 利用Set
const res1 = Array.from(new Set(arr));- 两层for循环 + splice
const unique1 = arr => { let len = arr.length; for (let i = 0; i < len; i++) { for (let j = i + 1; j < len; j++) { if (arr[i] === arr[j]) { arr.splice(j, 1); // 每删除一个树,j--保证j的值经过自加后不变。同时,len--,减少循环次数提升性能 len--; j--; } } } return arr; }- 利用indexOf
const unique2 = arr => { const res = []; for (let i = 0; i < arr.length; i++) { if (res.indexOf(arr[i]) === -1) res.push(arr[i]);//当该值不存在时push至res;-1为不存在;>0即为下标 } return res; } let arr = [1, 0, false]; console.log( arr.indexOf(1) ); // 0 console.log( arr.indexOf(0) ); // 1 console.log( arr.indexOf(false) ); // 2 console.log( arr.indexOf(null) ); // -1- 利用include(包含)
const unique3 = arr => { const res = []; for (let i = 0; i < arr.length; i++) { if (!res.includes(arr[i])) res.push(arr[i]);//如果该值未重复则push入res } return res; } let arr = [1, 0, false]; console.log( arr.includes(1) ); // true 如果该值存在则为true- 利用filter (过滤)
const unique4 = arr => { return arr.filter((item, index) => { return arr.indexOf(item) === index;//arr.indexOf(item) 如果出现重复值只返回第一个值得下标;最终返回于index严格相等则是无重复的值、不相等则为已重复的值 }); }- 利用Map : 类似于对象{[key : value]}
map.size // 对象数据的长度 map.has('key') // 如果key存在则返回true map.get('key') // 返回该key对于的value const map = new Map([ ['name','张三'], ['title','author'] ]); console.log(map); // Map(2) {"name" => "张三", "title" => "author"} console.log(map.size); // 2 console.log(map.has('name')); // true console.log(map.get('name')); // '张三' console.log(map.has('title')); // true console.log(map.get('title')); // 'author' const unique5 = arr => { const map = new Map(); const res = []; for (let i = 0; i < arr.length; i++) { if (!map.has(arr[i])) { map.set(arr[i], true) res.push(arr[i]); } } return res; }