把去重后的结果放在一个临时数组中, 对原来数组的元素与临时数组元素比较, 临时数组中不存在这个元素的, 放入临时数组。javascript
function unique (arr) { if (!Array.isArray(arr)) return arr; var result = []; arr.map(function (item) { if (result.indexOf(item) == -1) { result.push(item); } }) return result; }
建立一个新的数组存放结果, 和一个空的对象。for循环时, 每次取出一个元素与对象进行对比, 若是这个元素不重复, 则把它存放到结果数组中, 同时把这个元素的内容做为一个对象的属性, 并赋值, 存入对象中。java
function unique (arr) { if (!Array.isArray(arr)) return arr; var result = []; var obj = {} arr.map(function (item) { if (!obj[item]) { result.push(item); obj[item] = 1 }; }) return result; }
先把数组排序, 而后比较相邻的两个值。排序的时候用原生的 sort 方法, JS引擎内部使用的是快速排序。数组
function unique(arr) { if (!Array.isArray(arr)) return arr; if (arr.length < 2) return arr; arr.sort(); // sort在元数组进行排序, 不生成副本 var result = [arr[0]] arr.map(function (item, index, arr) { if (index > 0) { if (item !== arr[index - 1]) { result.push(item); } } }) return result; } var arr = [99, 88, 22, 22, 44, 88, 99, '99'] console.log(unique(arr));
Set对象: 它是ES6新增的有序列表集合, 不会包含重复项。code
Array.from()方法: 将一个类数组或可遍历对象转换成真正的数组。对象
function unique (arr) { if (!Array.isArray(arr)) return arr; if (arr.length < 2) return arr; return Array.from(new Set(arr)) } var arr = [99, 88, 22, 22, 44, 88, 99, '99'] console.log(unique(arr));
function unique(arr) { if (!Array.isArray(arr)) return arr; if (arr.length < 2) return arr; return arr.filter(function(item, index, arr) { if (arr.indexOf(item) === index) { return true; } }); } var arr = [99, 88, 22, 22, 44, 88, 99, '99'] console.log(unique(arr));