JavaScript递归实现多维数组去重
一维数组去重的方法有很多,这里就不一一概述了。而多维数组,第一个想法就是递归实现,本文简单阐述了思路及代码,若有其他见解,欢迎一起讨论。
在实现多维数组去重前,得先知道一维数组如何去重,方法大家可以自行百度,在这里列举一种较推荐的方法。
/**
* 思路:获取没重复的最右一值放入新数组
* 从第一个值开始,将其与后面的值依次比较,
* 如若相等则终止当前循环并进入顶层循环的下一轮判断
*/
function uniq(array) {
var temp = []
var index = []
var i = array.length
for (var i = 0;i < l;i ++){
for(var j = i + 1; j < l;j ++){
if (array[i] === array[j]) {
i ++
j = i
}
}
temp.push(array[i])
index.push[i]
}
return temp
}
var arr = [1,2,7,3,5,2,3,2]
console.log(uniq(arr))
而多维数组的去重就是在一维数组上增加一个递归,因为我们起初并不知道多维数组的维度。具体代码如下:
var temp = []
function uniq(array){
var result = []
recursion(array) // 调用递归将多维数组变为一维数组再去重
for (var i = 0, len = temp.length;i < len;i ++){
for(var j = i + 1; j < len;j ++){
if (temp[i] === temp[j]) {
i ++
j = i
}
}
result.push(temp[i])
}
return result
}
// 新增递归函数
function recursion(array){
var len = array.length
for (var i = 0; i < len ;i ++) {
if (typeof array[i] == 'object') { // 如若数组元素类型是object,则递归
recursion(array[i])
} else {
temp.push(array[i]) // 否则添加到temp数组中
}
}
}
var arr = [1,[2,3],[3,2,[1,6,[3,5,'3']]]]
console.log(uniq(arr))