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()排序方法,然后根据排序后的结果进行遍历及相邻元素比对。