方法一、利用indexOf()方法
indexOf()方法可以用在字符串和数组上,用在字符串上返回某个指定的字符串值在字符串中首次出现的位置,用在数组上返回某个指定数组值在数组中首次出现的下标。
var arr = [1,2,2,2,3,3,4];
function unique(arr) {
var result = []; //用于存储去重后的数组
for(var i = 0; i < arr.length; i++) {
//如果result中没有arr[i],则把arr[i]添加到result中
if (result.indexOf(arr[i]) == -1) {
result.push(arr[i]);
}
}
return result;
}
unique(arr); //[1, 2, 3, 4]
方法二、利用Object对象
var arr = [1,2,2,2,3,3,4];
function unique(arr) {
var obj = {};
var result = [];
for(var i = 0; i < arr.length; i++) {
//如果obj里没有arr[i],则把arr[i]的值存入obj,并且把arr[i]的值存入新数组result
if (!obj[arr[i]]) {
obj[arr[i]] = 1;
result.push(arr[i]);
}
}
return result;
}
unique(arr); //[1,2,3,4]
方法三、利用forEach()和indexOf()方法
var arr = [1,2,2,2,3,3,4];
function unique(arr){
var newArr = [];
arr.forEach(function (item, index, Array) {
if(Array.indexOf(item) == index) {
newArr.push(item);
}
});
return newArr;
}
unique(arr); //[1, 2, 3, 4]
方法四、利用filter()和indexOf()方法
filter方法可以接收一个回调函数,这个回调函数和map函数类似,作用于每一个数组元素上,filter() 方法会创建一个新的数组,新数组中包含了符合条件的所有元素。
var arr = [1,2,2,2,3,3,4];
function unique(arr) {
return arr.filter(function (item, index, Array) {
return Array.indexOf(item) == index;
});
}
console.log(unique(arr)); //[1, 2, 3, 4]
方法五、利用Set对象和Array.from方法
重复元素在Set中会自动被过滤,利用这一特性,用 Set(arr) 把数组所有元素存入Set对象中,然后利用Array.from方法将Set对象转换成数组
var arr = [1,2,2,2,3,3,4];
function unique(arr) {
return Array.from(new Set(arr));
}
console.log(unique(arr)); //[1, 2, 3, 4]
方法六、和方法五一样,只不过利用了ES6的[...],更简洁
var arr = [1,2,2,2,3,3,4];
function unique(arr) {
return [...new Set(arr)];
}
console.log(unique(arr));