js中数组去重方法

数组去重

1.for循环方法
console.log("数组去重----------------------------");
var a = [1, 2, 4, 5, 2, 1, 3, 3, 3, 1, 1, "hi", "hi"];
function arr(a) {
  for (i = 0; i < a.length; i++) {
    for (j = i + 1; j < a.length; j++) {
    //判断是否有相等元素
      if (a[i] == a[j]) {
      //有相等元素则将后面的元素前移一位,覆盖掉j位置元素
        for (k = j; k < a.length; k++) {
          a[k] = a[k + 1];
        }
        a.length--;
        //若出现了相等的元素,则i位置的元素还需要和后面剩余的元素作比较
        j--;
      }
    }
  }
  return a;
}
console.log(arr(a));

在这里插入图片描述

2.indexof和lastIndexof方法(一个从前向后,一个从后向前)

indexOf() 方法可返回数组中某个指定的元素位置。
该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。
lastIndexOf() 方法可返回一个指定的元素在数组中最后出现的位置,从该字符串的后面向前查找。
该方法将从尾到头地检索数组中指定元素 item。开始检索的位置在数组的 start 处或数组的结尾(没有指定 start 参数时)。如果找到一个 item,则返回 item 从尾向前检索第一个次出现在数组的位置。数组的索引开始位置是从 0 开始的。
如果要检索的元素没有出现,则该方法返回 -1。

var arr = [1, 2, 3, 3, 2, "hello", "hello"];
function unique(arr) {
  let newArr = [];
  for (let i = 0; i < arr.length; i++) {
  //判断new数组中是否含有arr数组中的元素
    if (newArr.indexOf(arr[i]) === -1) {
     //如果没有则放入new数组中
      newArr.push(arr[i]);
    }
  }
  return newArr;
}
console.log(unique(arr));

在这里插入图片描述

4.includes方法

参数:第一个参数查找的数组元素,第二个参数表示判断的起始位置返回值:false/true

var arr = [1, 2, 3, 4];
console.log(arr.includes(6));
var arr = [1, 2, 3, 3, 2, "hello", "hello"];
function unique(arr) {
  let newArr = [];
  for (let i = 0; i < arr.length; i++) {
    if (!newArr.includes(arr[i])) {
      newArr.push(arr[i]);
    }
  }
  return newArr;
}
console.log(unique(arr));

在这里插入图片描述

5.forEach+indexof方法

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
注意: forEach() 对于空数组是不会执行回调函数的。

var arr = [1, 2, 3, 3, 2, "hello", "hello"];
function unique(arr) {
  let newArr = [];
  arr.forEach(function (item) {
    if (newArr.indexOf(item) === -1) {
      newArr.push(item);
    }
  });
  return newArr;
}
console.log(unique(arr));

在这里插入图片描述

6.filter+indexOf/includes方法

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测,不会改变原始数组

var arr = [1, 2, 3, 3, 2, "hello", "hello"];
function unique(arr) {
  let newArr = [];
  return arr.filter(function (item) {
    return newArr.includes(item) ? "" : newArr.push(item);
  });
}
console.log(unique(arr));

在这里插入图片描述

7.利用Set构造方法去重

Set构造方法(ES6),类似于数组,set中不允许重复。
几种常用方法:
1、add():用于数据的添加。
2、delete():用于数据的删除。
3、size():用于计算set对象的大小(相当于数组的长度)。
4、clear():清空数据。
5、has():用于寻找set对象中是否存在某个值。

var arr = [1, 2, 3, 3, 2, "hello", "hello"];
let set = new Set(arr);

console.log(set.add("world"));
console.log(set.delete("world"));
console.log(set.size);
console.log(set.has(1));

在这里插入图片描述

var arr = [1, 2, 3, 3, 2, "hello", "hello"];
let set = new Set(arr);
//原因:set方法自动去重
console.log(set, typeof set);
//将数组对象转换成数组
console.log(Array.from(set));
// console.log([...set]);

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值