方法一.for循环+indexOf
思路:
1.定义一个自定义函数
2.在函数内部创建一个新数组,用于作为去重后的数组
3.利用for循环遍历原数组
4.利用indexOf判断新数组中有没有循环到的这个值,没有则存入新数组中
5.返回新数组
总结:
新建一新数组,遍历传入数组,通过indexOf判断新数组中存不存在这个值,不存在就push进该新数组中
function Only(Array){
let NewArray = [] //新数组
for( let i = 0 ; i<array.length ; i++ ){ //遍历旧数组
if(NewArray.indexOf(array[i]) == -1){ //判断新数组是否存在这个值
NewArray.push(array[i]) //推入
}
}
return NewArray
}
方法二.[...new Set(Array)]
思路:
1.利用ES6的new Set(Array)对数组去重
2.将结果转换成数组
let Array = [1,1,2,2,3]
console.log(new Set(Array)) //Set(3) {1,2,3}
因此,我们可以借助转数组的方法,将去重后的结果转化成数组
let NewArray = Array.from(new Set(Array)) //[1,2,3] 这样的代码显得有点拉胯
let NewArrayPlus = [...new Set(Array)] //[1,2,3] 推荐这样写
方法三.判断数组下标法
思路:
与方法一同样的思路,但是
方法一:判断的是新数组中是否存在本次遍历的值
该方法:判断循环时,这个值是不是第一次出现,即遍历到的值在旧数组中的下标是否等于本次循环的次数i
function Only(Array){
let NewArray = []
for( let i=0 ; i<Array.length ; i++ ){
if( Array.indexOf(Array[i]) == i ){ //判断本次循环时,是不是第一次循环到该值
NewArray.push(Array[i])
}
}
return NewArray
}
方法四.多维数组元素去重
思路:
整体new Set那套返回
细节方面,通过for遍历每一个元素,然后判断是否是数组类型,是的话就把这个元素拎出来用new Set整一遍,然后重新调用去重函数,去检查这个元素内部是不是还有数组类型的
function remove (arry){
for (let i = 0; i < arry.length; i++) {
// 如果是数组
if (Array.isArray(arry[i])) {
arry[i] = Array.from(new Set(arry[i]))
remove(arry[i])
}
}
let ary = Array.from(new Set(arry))
return ary
}
方法五.去重相同数组
思路:
用于都是数字的,先把数组转换成字符串,然后用new Set那套
function remove (arry){
let newAry = arry.map((item) => {
return item.join('')
})
newAry = Array.from(new Set(newAry))
newAry = newAry.map(item => item.split('').map(item => Number(item)))
}