zoukankan      html  css  js  c++  java
  • Array去重探究

    如何高效简洁地去重?从下面两个角度考虑:

    1.借助js对象key唯一的特性去重

    2.借助Array自身方法遍历、操作Array

    第一种方法最简洁,局限是使用了Array自身方法就必须承受filter不改变原数组的特点。

     1              function uniq1(arr){
     2                 var obj = {};
     3                 return arr.filter(function(item,index,arr){
     4                     if(obj.hasOwnProperty(item)){  //重复了
     5                         return false;
     6                     } else {
     7                         obj[item] = true;
     8                         return true;
     9                     }
    10                 });
    11             }

    所以有了第二种方法,我们自己来对数组筛选,满足一切去重的自定义要求。这里使用splice是对原数组进行元素删除,使得可以改变原数组。删除元素引起数组下标发生变化,所以第六行把i--。这种情况不能使用forEach遍历,因为该方法中的index貌似是只读的。

     1         function uniq2(arr){
     2                 var obj = {};
     3                 for(i=0;i<arr.length;i++){
     4                     if(obj.hasOwnProperty(arr[i])){  //重复了
     5                         arr.splice(i,1);
     6                         i--;  //不加这行代码会每次漏掉一个元素
     7                     } else {
     8                         obj[arr[i]] = true;
     9                     }    
    10                 }
    11                 return arr;
    12             }
  • 相关阅读:
    cordova windows环境配置
    javascript 变量声明 和 作用域
    javascript 数组总结
    处理事件的兼容写法
    javascript 闭包
    事件委托和事件绑定
    依赖注入
    .Net委托
    sql游标循环结果集
    T-Sql之集合
  • 原文地址:https://www.cnblogs.com/feitan/p/5118558.html
Copyright © 2011-2022 走看看