运用js 实现数组的去重

约定不等于承诺〃 2021-12-10 08:35 333阅读 0赞

一、数组的去重

  1. 数组的去重是将一个数组中重复的元素去除,保证数组中的元素都是唯一的,没有重复的

二、数组的去重实现

  1. 遍历数组的方法

1)实现思路:新建一个数组,遍历要去重的数组,当值不在新数组的时候,也就是indeOf 为-1的时候,就加入到新的数组当中
2)实现代码

  1. var arr1 = [3,6,4,9,4,8,8,5,6,8,9];
  2. function uniquel (arr) {
  3. var hash = [];
  4. for( var i=0; i<arr.length; i++){
  5. if( hash.indexOf(arr[i]) == -1){
  6. hash.push(arr[i]);
  7. }
  8. }
  9. return hash;
  10. }
  11. console.log(uniquel(arr1));
  1. 数组下标判断法

1)实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i, 那么第i项是重复的,
忽略掉,否则存入新的数组当中
2)实现代码

  1. var arr2 = [3,6,4,9,4,8,8,5,6,8,9];
  2. function unique2 (arr) {
  3. var hash = [];
  4. for( var i=0; i<arr.length; i++){
  5. if( arr.indexOf(arr[i]) == i){
  6. hash.push(arr[i]);
  7. }
  8. }
  9. return hash;
  10. }
  11. console.log(unique2(arr2));
  1. 排序后相邻去重法

1)实现思路:给传入的数组排序,排序后相同的值会相邻,然后遍历排序后的数组,当不与前一值
重复,那么就加入到新的数组当中
2)实现代码

  1. var arr3 = [3,6,4,9,4,8,8,5,6,8,9];
  2. function unique3 (arr) {
  3. arr.sort();
  4. var hash = [arr[0]];
  5. for( var i=0; i<arr.length; i++){
  6. if(arr[i] != hash[hash.length-1]){
  7. hash.push(arr[i]);
  8. }
  9. }
  10. return hash;
  11. }
  12. console.log(unique3(arr3));
  1. 优化遍历数组法

1)实现思路:新建一个空的数组,遍历需要去重的数组,外层循环表示从0到arr.length,内层循环表示从i+1 到arr.lenth,将没重复的右边值放入到新数组当中,有重复就终止当前循环进入外层循环
2)实现代码

  1. var arr4 = [3,6,4,9,4,8,8,5,6,8,9];
  2. function unique4 (arr) {
  3. var hash = [];
  4. for(var i=0; i<arr.length; i++){
  5. for(var j=i+1; j<arr.length; j++){
  6. if( arr[i] === arr[j]){
  7. ++i;
  8. }
  9. }
  10. hash.push(arr[i]);
  11. }
  12. return hash;
  13. }
  14. console.log(unique4(arr4));
  1. ES6的set方法

1)实现思路:通过ES6的set数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值,
set函数 可以接受一个数组或者是类数组的对象作为参数,用来初始化
2)实现代码

  1. var arr5 = [3,6,4,9,4,8,8,5,6,8,9];
  2. function unique5 (arr) {
  3. var hash = new Set(arr);
  4. return [...hash];
  5. }
  6. console.log(unique5(arr5));
  1. 利用includes 方法

1)实现思路:新建一个空的数组,遍历数组,通过includes()的方法检测新数组中是否含有这个值,
如果没有,那么就添加到新的数组当中
2)实现代码

  1. var arr6 = [3,6,4,9,4,8,8,5,6,8,9];
  2. function unique6 (arr){
  3. var hash = [];
  4. for( var i=0; i<arr.length; i++){
  5. if( !hash.includes( arr[i])){
  6. hash.push(arr[i]);
  7. }
  8. }
  9. return hash;
  10. }
  11. console.log(unique6(arr6));
  1. 利用hasOwnProperty 方法

1)实现思路:新建一个空对象,通过hasOwnProperty() 判断是否存在对象的属性
2)实现思路

  1. var arr7 = [3,6,4,9,4,8,8,5,6,8,9];
  2. function unique7 (arr) {
  3. var obj = { };
  4. return arr.filter( function(item, index, arr){
  5. return obj.hasOwnProperty( typeof item + item ) ? false : (obj [typeof item + item] = true)
  6. })
  7. }
  8. console.log(unique7(arr7));
  1. 利用filter 方法

1)实现思路:通过filter() 的方法找到数组中符合条件的所有元素,在当前元素中,在原始数组中的第一个索引等于当前索引值,否则返回当前元素
2)实现代码

  1. var arr8 = [3,6,4,9,4,8,8,5,6,8,9];
  2. function unique8 (arr) {
  3. return arr.filter( function(item, index, arr){
  4. return arr.indexOf(item, 0) == index;
  5. })
  6. }
  7. console.log(unique8(arr8));

发表评论

表情:
评论列表 (有 0 条评论,333人围观)

还没有评论,来说两句吧...

相关阅读

    相关 运用

    一种数据类型(引用类型) 1、动态初始化:数据类型\[\] 数组名=new 数据类型\[大小\];int\[\] a=new int\[10\]; 数组的引用:数组名\[下

    相关 数组实际运用

    做了一个数组去重的demo; 假如是一个需要展示的数组,然后又一个点击加载更多,或者下拉加载更多,但是每次都会调用数据库的数据,为了减少后台的负荷,我们可以把数据存在缓存里面

    相关 JS实现数组

    1.双循环去重。先将数组的第一个元素赋值给一个新数组,再用两个嵌套的for循环。从数组的第二个元素开始比较该元素与新数组中是否有重复的元素,如果有就跳出当前循环;如果没有就把第