Js中数组去除重复项

在学习Js的时候经常会用到数组去除重复项的问题
下列将用不同的方法实现去重的问题:

一、利用双重循环和数组splice方法

	function unique(arr) {
	  var len = arr.length
	  //第一重控制外部循环次数
	  for (var i = 0; i < len; i++) {
	  	//第二重控制比较次数
	    for (var j = i + 1; j < len; j++) { //数组中第一项和第二项作比较
	      if (arr[i] === arr[j]) {
	        arr.splice(j, 1)
	        j--   //如果已经有相同项删除时,j应该减去1,在跟后面压进来的值作比较
	      }
	    }
	  }
  return arr
}

console.log(unique(arr))

二、利用数组重排序后比较相邻的两项

function unique(arr) {
  if (!Array.isArray(arr)) return  //如果不是数组直接return
  arr = arr.sort()  //数组重排序
  var newArr = []  //新数组存放值
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] != arr[i + 1]) {  //因为数组经过排序,只考虑相邻两项即可
      newArr.push(arr[i])
    }
  }
  return newArr
}
console.log(unique(arr))

三、利用indexOf方法进行去重

function unique(arr) {
  if (!Array.isArray(arr)) return
  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))

当然,跟indexOf()具有相同用法的还有includes()方法只需要重写判断语句即可

 if (!newArr.includes( arr[i]))	//返回的是boolean值

四、ES6中set构造函数

function unique (arr) {
  	return Array.from(new Set(arr)) //Array.from 方法可以将 Set 结构转为数组。
}

五、reduce函数实现去重

var newArr = arr.reduce(function (prev, cur) {
    prev.indexOf(cur) === -1 && prev.push(cur);
    return prev;
},[]);

prev是刚开始在回调函数中定义的空数组
实现的基本原理如下:

① 初始化一个空数组
② 将需要去重处理的数组中的第1项在初始化数组中查找,如果找不到(空数组中肯定找不到),就将该项添加到初始化数组中
③ 将需要去重处理的数组中的第2项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中
④ ……
⑤ 将需要去重处理的数组中的第n项在初始化数组中查找,如果找不到,就将该项继续添加到初始化数组中
⑥ 将这个初始化数组返回

Js中去除数组重复项实现的方法有很多,但上述方法时比较简单省力的,推荐使用。其中ES6的set()方法最为适用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值