Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

js数组去重(2018.02.05) #19

Open
aermin opened this issue Feb 13, 2018 · 0 comments
Open

js数组去重(2018.02.05) #19

aermin opened this issue Feb 13, 2018 · 0 comments

Comments

@aermin
Copy link
Owner

aermin commented Feb 13, 2018

不用api

思路
1.构建一个新的数组存放结果
2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
3.若结果数组中没有该元素,则存到结果数组中

code

Array.prototype.arrUnique_for = function () { 
         let res = [this[0]]; 
         let flag = false; 
         for (let i = 1; i < this.length; i++) { 
             for (let j = 0; j < res.length; j++) { 
                 if (this[i] === res[j]) { 
                      flag = true; 
                      break;
                 }
             } 
             if (!flag) { 
               res.push(this[i]); 
             }
        flag = false; 
       }
       return res; 
}

用ES5

用indexOf的常规操作

思路
建一个空的临时数组,遍历传进来的参数(数组),并用临时数组.indexOf对数组的每一个值做判断,等于 -1表示临时数组没有这个值且收下这个值,否则表示已经有一个这个值了,拒收。
最后,临时数组就是我们要的去重后的数组。

code

function unique(arr) {
   var n = [];
   for (var i = 0; i < arr.length; i++) {
       if (n.indexOf(arr[i]) == -1) n.push(arr[i]);
   }
   return n;
 };
 var arr=[1, 2, 1, 1, '1'];
 console.log(unique(arr)); //[1, 2, "1"]

稍微优化一下

code

Array.prototype.unique = function() {
  var n = [];  //一个新的临时数组
  for (var i = 0; i < this.length; i++)  {  //遍历当前数组
      if (n.indexOf(this[i]) == -1) n.push(this[i]);    //如果当前数组的第i已经保存进了临时数组,那么跳过,否则把当前项push到临时数组里面
  }
  return n;
};
var arr=[1, 2, 1, 1, '1'];
console.log(arr.unique()); //[1, 2, "1"]

备注:

①Array.prototype 属性表示 Array 构造函数 [] 的原型 ,也就是[]是Array的一个实例, 所以本例子中 arr继承了Array.prototype的unique方法,且unique方法的this指向arr。
Array.prototype
js中 [].slice 与 Array.prototype.slice 有什么区别?

用ES6

常规操作

code

function unique(array) {
   return Array.from(new Set(array));
}
var array = [1, 2, 1, 1, '1'];
console.log(unique(array)); // [1, 2, "1"]

备注:
①Array.from() 方法从一个类似数组或可迭代对象中创建一个新的数组实例。
②ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
长这样
screenshot.png

极简操作

code

var unique = (a) => [...new Set(a)]  
var array = [1, 2, 1, 1, '1'];
unique(array)

备注:

① 扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列 数组的扩展

@aermin aermin changed the title 数组去重(2018.02.05) js数组去重(2018.02.05) Mar 12, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant