一、利用数组的splice方法
var array = [1, 2, 3, 4, 5, 6, 1, '1'];
function unique(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1); //该方法向/从数组中添加/删除项目,然后返回被删除的项目。
j--;
}
}
}
return arr;
}
console.log( unique(array) ); //[1, 2, 3, 4, 5, 6]
二、 利用数组的indexOf和splice方法
var array = [1, 2, 3, 4, 5, 6, 1, '1'];
function unique(arr) {
for (var i = 0; i < arr.length; i++) {
if ( arr.indexOf(arr[i]) != i ) { // indexOf返回某个指定的字符串值在字符串中首次出现的位置
arr.splice(i, 1); //该方法向/从数组中添加/删除项目,然后返回被删除的项目。
i--;
}
}
return arr;
}
console.log( unique(array) ); // [1, 2, 3, 4, 5, 6, "1"]
三、利用数组的splice方法和借用新的数组
var array = [1, 2, 3, 4, 5, 6, 1, '1'];
function unique(arr) {
var brr = [];
for (var i = 0; i < arr.length; i++) {
if ( arr.indexOf(arr[i]) == i ) { // indexOf返回某个指定的字符串值在字符串中首次出现的位置
brr.push( arr[i] );
}
}
return brr;
}
console.log( unique(array) ); // [1, 2, 3, 4, 5, 6, "1"]
四、利用对象属性的覆盖特性
var array = [1, 2, 3, 4, 5, 6, 1, '1'];
function unique(arr) {
var obj = {};
var brr = [];
for( var i = 0; i < arr.length; i++ ){
if( !obj[arr[i]] ){
obj[arr[i]] = true;
brr.push( arr[i] );
}
}
return brr;
}
console.log( unique(array) ); // [1, 2, 3, 4, 5, 6]
五、利用es6提供的心的数据类型Set
var array = [1, 2, 3, 4, 5, 6, 1, '1'];
function unique(arr) {
let s = new Set(arr);
return s;
}
console.log( unique(array) ); // [1, 2, 3, 4, 5, 6,'1'];
需要注意的是,上面的方法,有的是可以去掉字符串1,有的则没有去掉。
个人使用的比较多是第一种和第四种方法。