正文
], {hello:
'world'
}] const result = unique(src) t.is(result.length,
7
) })
简单去重的几种方法
暂时先只看数组中存number的去重方法:
最粗暴的是这种,利用Set不能有重复数据的特性做
const unique = arr => Array.from(new Set(arr))
正常思路如下,维护一个暂存数组,将数据存进去
function unique(arr) { let temp = [] for (let i = 0; i if (temp.indexOf(arr[i]) === -1) { temp.push(arr[i]) } } return temp }
reduce做去重(下面有参考链接),意思是每次往前一个数组中塞数据,其实就是上面正常思路的去中间变量版
function unique(arr) { let temp = [] for (let i = 0; i if (temp.indexOf(arr[i]) === -1) { temp.push(arr[i]) } } return temp }function uniqueByReduce(arr) { return arr.reduce((prev, next) => { if (prev.indexOf(next) === -1) { prev.push(next) } return prev }, []) }
这个时候基本int型数据都没什么问题了。
但是我上面测试用例中最后一个用例明显是无法通过的。那么就需要更多的判断
更复杂的去重
先贴代码:
function unique(arr) { let temp = [] for (let i = 0; i if (typeof arr[i] === 'object' && (! Array.isArray(arr[i]))) { if