数组去重的方法

一、嵌套双层for循环

        1.取到数组第一个元素,

        2.将取到的元素与后一个元素对比是否相同,

        3.1相同则使用数组splice方法删除,(j,1) j为删除的下标,1为删除的个数,删除后数组长度减一,此时下标为j的位置的元素变成了一个之前j下标的后一个元素,需要再对现在j下标的元素进行对比,即重复此步骤

        3.2不相同则j+1,向后继续遍历对比,对比相同则重复步骤3.1

        4.第一个元素与后元素对比结束,此时已经删除与第一个元素相同的元素,然后取到此时循环结束后的第二个元素

        5.重复步骤2至此步骤,直到i循环最后一位结束for循环

        6.对要执行的数组调用此方法并输出,就能得到已经去重后的数组

var arr = [1, 2, 2, 2, 4, 2, 'hello', 1, 3, 'hello'];
function unique(arr){
  for(var i = 0; i < arr.length; i++){
    for(var j = i + 1; j < arr.length; j++){
      if(arr[i] == arr[j]){
        arr.splice(j,1);
        j--;
      }
    }
  }
}
unique(arr);
console.log(arr);

二、indexOf()/lastIndexOf()方法

        1.创建一个空数组newArr[]

        2.for循环遍历数组对象

        3.内部判断语句,使用indexOf()/lastIndexOf()判断newArr数组里是否有arr数组里下标为i的这个元素,判断是否有相同的值,没有就返回-1,

        4.1判断为-1时,意为找不着,即newArr数组里没有这个元素,那么使用push方法将这个没有的元素存入newArr数组中,继续循环

        4.2判断结果不为-1时,即有相同值得元素,那么继续向后寻找判断(lastIndexOf()是从后向前找)

        5.循环结束后,返回存好数的数组newArr

        6.对要执行的数组调用此方法并输出,就能得到已经去重后的数组

(indexOf()方法)

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

(lastIndexOf()方法)

var arr = [1, 2, 2, 2, 4, 2, 'hello', 1, 3, 'hello'];
function unique(arr) {
  var newArr = [];
  for (var i = 0; i < arr.length; i++){
    if(newArr.lastIndexOf(arr[i]) === -1) {
      newArr.push(arr[i])
    }
  }
  return newArr
}
console.log(unique(arr));

三、include方法

        1.创建空数组newArr[]

        2.使用for循环,遍历数组里每一个元素

        3.使用判断语句if,判断newArr[]里是否包含这个元素

        4.1当newArr[]数组里不包含这个元素时,返回false,并将这个不包含的元素使用push方法输入到newArr中,可以使用 ===false 来判断,也可在判断语句最前方使用!取反,而判断语句if需要判断为真时,才会执行语句,push存入数组,继续循环

        4.2.当newArr[]数组里不包含这个元素,那么不执行判断语句内容,继续循环

        5.循环结束后,返回存好数的数组newArr

        6.对要执行的数组调用此方法并输出,就能得到已经去重后的数组

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

四、forEach + indexOf 方法

        1.建立新数组newArr[]

        2.使用forEach()方法遍历数组,item为每一个数组元素

        3.使用判断语句if,判断条件为:使用indexOf()方法判断数组newArr()里是否有这个元素,

        4.1当结果为-1时,则数组中没有该元素,执行条件语句,将元素push存入newArr数组中,继续循环

        4.2当结果不为-1时,即查找到数组内有相同元素,不执行push,并继续循环

        5.循环结束后,返回存好数的数组newArr

        6.对要执行的数组调用此方法并输出,就能得到已经去重后的数组

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

五、set方法去重

        因为set方法使得数组元素具有唯一性,会自动去除其他相同的数组元素

var arr=[1,2,3,3,2,'hello','hello'];
var set=new Set(arr);
console.log(Array.from(set));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值