js---《数组去重的方法(上)》{filter()和indexOf()实现去重,reduce()和includes()实现去重,双重for循环+splice(),for循环+findlndex..}

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

let originalArray=[1,2,3,4,1,2,3,4]
let uniqueArray=originalArray.filter((item,index,array)=>{
	return array.indexof(item)===index
})

//结果 uniqueArray===[1,2,3,4]

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 filter()方法进行过滤

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

let originalArray=[1,2,3,4,1,2,3,4]
let uniqueArray=originalArray.reduce((unique,item)=>{
	unique.includes(item)?unique:[...unique,item]
},[])

//uniqueArray===[1,2,3,4]

reduce() 方法将数组缩减为单个值 includes()方法用来判断一个数组是否包含一个指定的值,如果是返回
true,否则false。

3.双重for循环+splice()

思路:利用双重for循环找出重复的元素,然后在使用splice()方法删除重复的一个。

function ArrayToHeavy(arr){
	//遍历数组中的所有元素
	for(var i=0,len=arr.length;i<len;i++){
		for(var v=i+1;v<len;v++){
			if(arr[i]===arr[v]){
				arr.splice(v,1)
				//splice方法会改变数组长度,所以要将数组长度len和下标v减一
				len--;
				v--
			}
		}
	}
	return arr
}
let a=[2,4,5,7,4,8,0,4,5,7,9,4,5,21];
console.log(ArrayToHeavy(a));
//结果:[2,4,5,7,8,0,9,21]

4.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))
//[1,2,3,4,5,6]

5.sort循环

该方法是利用sort方法进行排序,进行循环,若原数组的i项和新数组的i-1不一致,就push进去

var arr = [1,2,3,4,5,6,6,5,4,3,2,1]
function Array (arr) {
    arr = arr.sort()
    let newArr = []
    for(let i = 0;i<arr.length;i++){
      arr[i] === arr[i-1] ? newArr : newArr.push(arr[i])
    };
    return newArr
}
console.log(Array(arr));
//[1,2,3,4,5,6]

6.Set

Es6中新增数据类型,最大的特点就是数据不重复。Set函数可接受数组(或者为类数组对象)作为参数来初始化,利用该特性也能对数组进行去重。

var arr = [1,2,3,4,5,6,6,5,4,3,2,1]
    function Array (arr) {
      // .new Set方法,返回是一个类数组.
      //  需要结合 ...运算符,转成真实数组
      return ([...new Set(arr)])
    }
    console.log(Array(arr));

若有不解,及时提出哦!

小作者在持续更新中…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漠媂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值