JavaScript数组去重
数组遍历
function unique(arr) { var newArr = []; for (var i = 0; i < arr.length; i++) { if (newArr.indexOf(arr[i]) === -1) { newArr.push(arr[i]); } } return newArr;}复制代码
排序相邻去重
function unique(arr) { arr.sort(); var newArr = [arr[0]] for (var i = 1; i < arr.length; i++) { if (arr[i] !== newArr[newArr.length - 1]) { newArr.push(arr[i]) } } return newArr;}复制代码
键值对比法
function unique(arr) { var obj = {}, newArr = [], val, type; for (var i = 0; i < arr.length; i++) { val = arr[i]; type = typeof val; if (!obj[val]) { obj[val] = [type]; newArr.push(val); } else if (obj[val].indexOf(type) < 0) { obj[val].push(type) newArr.push(val); } } return newArr;}复制代码
set解构法
function unique(arr) { return [... new Set(arr)]}复制代码
JavaScript数组扁平化
- 递归
function flatten(arr){ var res = []; for(var i=0;i
- reduce
function flatten(arr){ return arr.reduce(function(prev,item){ return prev.concat(Array.isArray(item)?flatten(item):item); },[]);}复制代码
- toString
function flatten(arr){ return arr.toString().split(',').map(function(item){ return +item; })}复制代码
- 扩展运算符
function flatten(arr){ while(arr.some(item=>Array.isArray(item))){ arr = [].concat(...arr); } return arr;}复制代码