js去除數組重復成員
第一種思路是:遍歷要刪除的數組arr, 把元素分別放入另一個數組tmp中,在判斷該元素在arr中不存在才允許放入tmp中
用到兩個函數:for ...in 和 indexOf()
1 <script type="text/javascript"> 2 var student = ['qiang','ming','tao','li','liang','you','qiang','tao']; 3 function unique(arr){ 4 // 遍歷arr,把元素分別放入tmp數組(不存在才放) 5 var tmp = new Array(); 6 for(var i in arr){ 7 //該元素在tmp內部不存在才允許追加 8 if(tmp.indexOf(arr[i])==-1){ 9 tmp.push(arr[i]); 10 } 11 } 12 return tmp; 13 } 14 </script>
第二種思路是:把目標數組arr的元素值和鍵的位置調換 自動就把重復的元素給刪除掉了,調換后的樣子:array('qiang'=>1,'ming'=>1,'tao'=>1)
1 <script type="text/javascript"> 2 var student = ['qiang','ming','tao','li','liang','you','qiang','tao']; 3 function unique(arr){ 4 var tmp = new Array(); 5 for(var m in arr){ 6 tmp[arr[m]]=1; 7 } 8 //再把鍵和值的位置再次調換 9 var tmparr = new Array(); 10 for(var n in tmp){ 11 tmparr.push(n); 12 } 13 return tmparr; 14 } 15 </script>
第三種思路是:ES6 提供了新的數據結構 Set。它類似於數組,但是成員的值都是唯一的,沒有重復的值。使用Array.from
方法可以將Set結構轉為數組的特性,去除數組重復成員
1 let oldarray = [1,2,3,4,4,5] 2 function RemovingArrayRepeating(array) { 3 return Array.from(new Set(array)); 4 } 5 RemovingArrayRepeating(oldarray )//[1,2,3,4,5]
第四種思路是:利用hasOwnProperty
1 function unique(arr) { 2 var obj = {}; 3 return arr.filter(function (item, index, arr) { 4 return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)//利用hasOwnProperty 判斷是否存在對象屬性 但是無法判斷對象是否相同,直接去重 5 }) 6 }
第五種思路是:利用Map數據結構去重
1 function unique(arr) { 2 let map = new Map(); 3 let array = new Array(); 4 // 數組用於返回結果 5 for (let i = 0; i < arr.length; i++) { 6 if (map.has(arr[i])) { 7 // 如果有該key值 8 map.set(arr[i], true); 9 } else { 10 map.set(arr[i], false); 11 // 如果沒有該key值 12 array.push(arr[i]); 13 } 14 } 15 return array;//對象不能去重 16 }
第六種思路是:利用reduce+includes
1 function unique(arr) { 2 return arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);//對象不能去重 3 }
第七種思路是:利用filter
1 function unique(arr) { 2 return arr.filter( 3 function (item, index, arr) { 4 //當前元素,在原始數組中的第一個索引==當前索引值,否則返回當前元素 5 return arr.indexOf(item, 0) === index;//直接把NaN干掉 6 } 7 ); 8 }
第八種思路是:利用includes
1 function unique(arr) { 2 if (!Array.isArray(arr)) { 3 console.log('type error!') 4 return 5 } 6 var array = []; for (var i = 0; i < arr.length; i++) { 7 if (!array.includes(arr[i])) { 8 //includes 檢測數組是否有某個值 9 array.push(arr[i]); 10 } 11 12 } 13 return array;//對象不能去重 14 }
第九種思路是:利用sort()
1 function unique(arr) { 2 if (!Array.isArray(arr)) { 3 console.log('type error!') 4 return 5 } 6 arr = arr.sort() 7 var arrry = [arr[0]]; 8 for ( 9 var i = 1; i < arr.length; i++) { 10 if (arr[i] !== arr[i - 1]) { 11 arrry.push(arr[i]); 12 } 13 } 14 return arrry;//NaN 對象不能去重 15 }
第十種思路是:利用對象的屬性不能相同的特點進行去重
1 function unique(arr) { 2 var arrry = []; 3 var obj = {}; 4 for (var i = 0; i < arr.length; i++) { 5 if (!obj[arr[i]]) { 6 arrry.push(arr[i]) 7 obj[arr[i]] = 1 8 } else { 9 obj[arr[i]]++ 10 } 11 } 12 return arrry;////'NaN' true 對象不能去重 13 }
第十一種思路是:js根據某字段去重json數組
1 /** 2 * 根據某一字段 去重json數組 3 * @param JsonArray :需要去重的json數組 4 * @param fieldName :根據此字段去重 5 */ 6 export function jsonArrayToFilterByFieldName(JsonArray, fieldName) { 7 let deduplicateJsonArray = []; 8 for (let i = 0; i < JsonArray.length; i++) { 9 let retrieveJson = JsonArray[i]; 10 if (i == 0) { 11 deduplicateJsonArray.push(retrieveJson); 12 } else { 13 let filterData = deduplicateJsonArray.filter(function (item) { 14 return item[fieldName] == retrieveJson[fieldName]; 15 }) 16 if (filterData.length == 0) { 17 deduplicateJsonArray.push(retrieveJson); 18 } 19 } 20 } 21 return deduplicateJsonArray; 22 }