zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    利用Linux系统生成随机密码的8种方法
    go语言中ASCII&unicode&utf8由来
    go语言指针
    js设计模式=封装
    python中urllib.request对象案例
    php实现jwt
    python错误捕获练习
    python多线程
    python多进程练习
    http三次握手,四次挥手
  • 原文地址:https://www.cnblogs.com/jackson-yqj/p/9438368.html
Copyright © 2011-2022 走看看