数组去重
1. 利用for嵌套for,然后splice去重
function unique(arr) {
var len = arr.length;
for (var i = 0; i < len; i++) {
for (var j = i + 1; j < len; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--; // 每删除一个数j的值就减1
len--; // j值减小时len也要相应减1(减少循环次数,节省性能)
}
}
}
return arr;
}
2. indexOf(JavaScript 版本: 1.6 )
array.indexOf(item,start) 方法可返回数组中某个指定的元素位置,如果在数组中没找到指定元素则返回 -1。
function unique_indexOf(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
if (newArr.indexOf(item) === -1) {
newArr.push(item);
}
}
return newArr;
}
3. filter(JavaScript 版本: 1.6 )
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。filter() 不会改变原始数组。
function unique_filter(arr) {
return arr.filter(function (item, index) {
// 当前元素的在数组中的第一个索引等于当前索引,返回该元素
return arr.indexOf(item) === index;
})
}
4.sort(相邻元素对比)(JavaScript 版本: 1.1 )
function unique_sort(arr) {
let newArr = arr.sort();
for (let i = 0; i < newArr.length; i++) {
if (newArr[i]===newArr[i+1]) {
newArr.splice(i+1,1);
}
}
return newArr;
}
5. includes(ECMAScript 6)
includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
function unique_includes(arr) {
if (!Array.isArray(arr)) {
console.log('type error!');
return
}
let newArr = [];
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
if (!newArr.includes(item)) {
newArr.push(item);
}
}
return newArr;
}
6. Set(ECMAScript 6)
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
function uniqueSet(arr) {
return Array.from(new Set(arr))
//或者:return [...new Set(arr)]
}