我们一起写算法03

js数组去重、找到数组中重复元素和不重复元素三道数组相关算法题

前端面试中关于数组问题层出不穷,就我见到三个问题做出以下分析。

问题如下:

  1. 问题1:如何实现数组的去重

  2. 问题2:从下面数组中找出不重复的元素算法

  3. 问题3:从下面数组中找出重复的元素算法

1.实现数组去重的方法

实现数组去重有多重方法:

  1. 方法1:计数排序,遍历每个元素为其设置布尔值。只针对正整数。

    var a = [5,8,3,4,3,2, 8];
    var onlyElement = {};
    
    for(let i = 0;i < a.length; i++){
    	if (a[i] in onlyElement) {
    		//可什么也不做
    	}else{
    		//onlyElement的key不存在a[i]元素时设为TRUE
    		onlyElement[a[i]] = true
    	}
    }
    
    console.log(onlyElement)
    //onlyElement对象的key值是数组中出现过的元素,且不重复,打印key值即可
    console.log(Object.keys(onlyElement))
    	
    

    结果为:
    在这里插入图片描述

  2. 方法2:使用ES6的set方法

    最简单的方法。

    var a = [5,8,3,4,3,2, 8];
    a = new Set(a)
    console.log(a)
    

    输出结果:

    在这里插入图片描述

2.找到数组中不重复的元素

使用问题1的解决思路,遍历每一个元素,为其设置布尔值,以供选择。

思路:

  1. 创建一个onlyElement 对象,key值是数组中出现的元素,value值是数组中元素出现的次数,出现多于一次,都会赋值为false。出现一次即不重复的元素,会被赋值为true。

  2. 所以onlyElement 的key值是数组中所有出现过得元素,也相当于是去重后的元素。

  3. 遍历onlyElement 对象,判断其value值是否为true。

  4. 创建一个新数组用于保存不重复的元素

代码如下:

var a = [5,8,3,4,3,2, 8];
var onlyElement = {};
var newonly = []

for(let i = 0;i < a.length; i++){
	if (a[i] in onlyElement) {
		//将onlyElement的key存在a[i]元素设为FALSE
		onlyElement[a[i]] = false
	}else{
		//onlyElement的key不存在a[i]元素的设为TRUE
		onlyElement[a[i]] = true
	}
}

console.log(onlyElement)
//遍历onlyElement,值为TRUE的是不重复元素,值为FALSE的是重复元素,
//将不重复的元素保存到新数组中,即可输出不重复元素列表;
for(let key in onlyElement){
	//console.log(onlyElement[key])
	if (onlyElement[key]===true){
		newonly.push(key)
}
}

console.log(newonly)

输出结果:

在这里插入图片描述

3.找到数组中重复的元素

问题2已经为问题3定好了思路,重复与不重复的元素都可以在onlyElement 对象中呈现,只需要遍历onlyElement 对象,判断其value值是否为false,然后创建一个新数组用于保存重复的元素。

代码只有第60行有改动。

在这里插入图片描述

每天进步一点点、充实一点点、加油!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值