js超简单7种数组去重的方法

第一种:

1、使用两层for循环

2、splice() 方法:用于添加或删除数组中的元素。

3、删除相同的值,后续的值往前移

var arr = [1, 2, 3, 3, 2, 'hello', 'hello'];
// 1.双层for循环
function unique(arr) {
  // 第一层for循环控制第一个数
  for (let i = 0; i < arr.length; i++) {
    // 第二层循环控制第二个数
    for (let j = i + 1; j < arr.length; j++) {
      // 判断前后是否相等
      if (arr[i] === arr[j]) {
        arr.splice(j, 1); //j:下标 1:删除个数
        // 后面的往前移一位
        j--;
      }
    }
  }
}
unique(arr);
console.log(arr); //[ 1, 2, 3, 'hello' ]

第二种:for循环+indexOf() +push()

思路:建立新数组、使用for循环遍历,再使用indexOf()判断,若为-1则使用push()加入新数组

1、indexOf() 方法:可返回数组中某个指定的元素位置。(如果有多个则返回第一次出现的位置,若找不到则返回-1)

2、push() 方法:可向数组的末尾添加一个或多个元素,并返回新的长度。

// 2. indexOf() 
var arr = [1, 2, 3, 3, 2, 'hello', 'hello'];

function unique(arr) {
  let newArr = []; //建立新数组
  for (let i = 0; i < arr.length; i++) { //for循环遍历
    // indexOf()返回-1说明,该值不在数组中
    if (newArr.indexOf(arr[i]) === -1) {
      newArr.push(arr[i]) //将该值加入新数组
    }
  }
  return newArr //返回新数组
}
console.log(unique(arr)); //[ 1, 2, 3, 'hello' ]

第三种:for循环+lastIndexOf() +push()

思路:建立新数组、使用for循环遍历,再使用lastIndexOf()判断,若为-1则使用push()加入新数组

1、lastIndexOf() 方法可返回一个指定的元素在数组中最后出现的位置,从该字符串的后面向前查找。

2、push() 方法:可向数组的末尾添加一个或多个元素,并返回新的长度。

var arr = [1, 2, 3, 3, 2, 'hello', 'hello'];

function unique(arr) {
  let newArr = []; //建立新数组
  for (let i = 0; i < arr.length; i++) { //for循环遍历
    // lastIndexOf()返回-1说明,该值不在数组中
    if (newArr.lastIndexOf(arr[i]) === -1) {
      newArr.push(arr[i]) //将该值加入新数组
    }
  }
  return newArr //返回新数组
}
console.log(unique(arr)); //[ 1, 2, 3, 'hello' ]

第四种:for循环+include() +push()

思路:建立新数组、使用for循环遍历,再使用include()判断该值是否存在于新数组,若为false则使用push()加入新数组

1、include()用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。

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));

第五种:forEach()遍历+indexOf+push() [同理也可以foreach+lastIndexOf+push]

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));

第六种:filter()+indexOf/includes()+push()

1、filter():创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

2、indexOf()/includes():例2、例3有,不做过多阐述。

var arr = [1, 2, 3, 3, 2, 'hello', 'hello'];

function unique(arr) {
  let newArr = [];
  newArr = arr.filter(function (item) {
    //三目运算符,
    return newArr.includes(item) ? "" : newArr.push(item)
  })
  return newArr;
}
console.log(unique(arr));

第七种:set()+Array.from()

1、Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用

2、Array.from():将一个类数组对象或者可遍历对象转换成一个真正的数组

var arr = [1, 2, 3, 3, 2, 'hello', 'hello'];
let set = new Set(arr); //set()数组去重之后变成类数组
console.log(Array.from(set)); //Array.from()将它变为数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值