方法一.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)))
}