1.set()方法(ES6)
var arr= [1,2,3,2,5,65,5,10];function unique (arr) {return Array.from(new Set(arr))}var arr= [1,2,3,2,5,65,5,10];console.log(unique(arr)); //[1, 2, 3, 5, 65, 10]
Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。返回一个新的迭代器对象。
Array.from() 方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
注意:这种方法还无法去掉“{}”空对象
2.indexOf(原生js)
//新建一个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组。var arr= [1,2,3,2,5,65,5,10];function unique(arr){if(!Array.isArray(arr)){return}let list =[];for(let i= 0;i<arr.length;i++){if(list.indexOf(arr[i])===-1){list.push(arr[i])}}return list;}console.log(unique(arr)) //[1, 2, 3, 5, 65, 10]
**Array.isArray()** 用于确定传递的值是否是一个 Array。indexOf这个方法找到指定元素在数组里第一次出现的位置,返回指定元素的索引值;如果没有找到,就返回-1。push这个方法可以向数组的末尾添加一个或多个元素,并返回新的长度。需要注意的是,该方法也会改变数组的长度。
3.利用filter
var arr= [1,2,3,2,5,65,5,10];function unique(arr) {return arr.filter(function(item, index, arr) {//当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素return arr.indexOf(item, 0) === index;});}console.log(unique(arr)) //[1, 2, 3, 5, 65, 10]
4.利用includes
var arr= [1,2,3,2,5,65,5,10];function unique(arr) {if (!Array.isArray(arr)) {console.log('type error!')return}var array =[];for(var i = 0; i < arr.length; i++) {if( !array.includes( arr[i]) ) {//includes 检测数组是否有某个值array.push(arr[i]);}}return array}console.log(unique(arr)) //[1, 2, 3, 5, 65, 10]
5.利用sort()
var arr= [1,2,3,2,5,65,5,10];function unique(arr) {if (!Array.isArray(arr)) {console.log('type error!')return;}arr = arr.sort()var arrry= [arr[0]];for (var i = 1; i < arr.length; i++) {if (arr[i] !== arr[i-1]) {arrry.push(arr[i]);}}return arrry;}console.log(unique(arr)) //[1, 2, 3, 5, 65, 10]
利用sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对。
