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; } 複製程式碼