js去除數組重復成員


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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM