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<arr.length;i++){ if(Array.isArray(arr[i])){ res = res.concat(flatten(arr[i])); }else{ res.push(arr[i]); } } return res; }
- 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; }