js中的数组去重的方式

1.filter()和indexOf()实现去重

let list = [2, 3, 3, 45, 34, 3, 4, 3, 4, 3, 4, 3, 34]
	// 数组名.filter() 过滤\遍历
	// 参数:item 数据中的每一个对象,index数据中的每一个对象的下表啊,array整个数组
	let num = list.filter((item, index, array) => {
		// array.indexOf()  只会查找对应数据的第一个数据的下标
		// 判断每一个数据是否和原数组中的数据相同
		return array.indexOf(item) === index
	})
	console.log(num)

2.reduce()和includes()实现去重

let list = [2, 3, 3, 45, 34, 3, 4, 3, 4, 3, 4, 3, 34]
	// reduce 累加,遍历
	let num = list.reduce((unique, item) => {
		// 判断一个数组中是否有这个属性 有则返回true  否则返回false
		return unique.includes(item) ? unique : [...unique, item]
	}, [])
	console.log(num)

3.reduce第二种方式实现去重

//第一个参数为初始值, 或者计算结束后的返回值。
//第二个参数,当前元素 !!
//ps:reduce里面有一定要return,return出去的值也要注意

var arr=[1,2,3,4,5,6,6,5,4,3,2,1]
function Array(arr){
	let newArr=[]
	return arr.reduce((prev,next,index,arr)=>{
	//如果包含,就返回原数据,不包含,就是把新数据追加进去
		return newArr.includes(next)?newArr.push(next)
	},0)
}
console.log(Array(arr))

4.includes方式

//利用了includes检查新数组是否包含原数组的每一项。如果不包含,就push进去。
//includes()方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false
var arr=[1,2,3,4,5,6,6,5,4,3,2,1]
function Array(arr){
	let newArr=[]
	for(let i=0;i<arr.length;i++){
		newArr.includes(arr[i])?newArr:newArr.push(arr[i])
	}
	return newArr
}
console.log(Array(arr))


5.new set() array.from() 通过es6中的set方法 再用array.from()在将set格式转化为数组格式

let a = [2, 3, 54, 4, 3, 4, 3, 4, 3, 433, 4, 132]
	let arr = Array.from(new Set(a))
	console.log(arr)

6.for + object

//利用对象属性名不能重复的特性,如果对象中不存在,就可以给push进去。
var arr=[1,2,3,4,5,6,6,5,4,3,2,1]
function Array(arr){
	let newArr=[]
	let obj={}
	for(let i=0;i<arr.length;i++){
		if(!obj[arr[i]]){
			newArr.push(arr[i])
			obj[arr[i]]=1
		}else{
			obj[arr[i]]++
		}
	};
	return newArr
}
console.log(Array(arr))

7.new Map()方法

//Map遍历整个数组,对里面的每个值做处理再返回一个新的值 利用数据结构存值的特点
var arr=[1,2,3,4,5,6,6,5,4,3,2,1]
function Array(arr){
	let newArr=[]
	let map=new Map()
	for(let i=0;i<arr.length;i++){
		if(!map.has(arr[i])){
			map.set(arr[i],true)
			newArr.push(arr[i])
		}
	};
	return newArr
}
console.log(Array(arr))

8.for循环+findlndex方式去重

//该方法是利用了findlndex的特性,查找元素时,未找到返回-1,接下来就需要进行判断,如果是-1,说明没有找到,就往新数组添加元素。
var arr=[1,2,3,4,5,6,6,5,4,3,2,1]
function Array(arr){
	let newarr=[]
	for(let i=0; i<arr.length;i++){
		newarr.indexof(arr[i]===-1?newarr.push(arr[i])):newarr
	};
	return newarr
}
console.log(Array(arr))

9.双重for循环 + splice() 或 双重for循环 + push() (ES5的方法)

	function list(arr) {
		// 遍历数组中的所有的元素
		for (var i = 0; i < arr.length; i++) {
			for (var v = i + 1; v < arr.length; v++) {
				// 检查是否有重复的元素
				if (arr[i] === arr[v]) {
					// 有,就从数组中去除
					arr.splice(v, 1);
					// splice方法会改变数组长度,所以要将数组长度len和下标 v1
					length--;
					v--
				}
			}
		}
		return arr
	}
	let a = [2, 3, 54, 4, 3, 4, 3, 4, 3, 433, 4, 132]
	console.log(list(a))
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值