1、利用对象属性名的唯一性(ES5+)
function unique(arr) {
var ret = { };
for (var i = 0; i < arr.length; i++) {
if (!ret[arr[i]]) {
ret[arr[i]] = true;
}
}
return Object.keys(ret);
}
2、利用列表 includes (ES5+)
function unique(arr) {
var ret = [];
for (var i = 0; i < arr.length; i ++) {
if (!ret.includes(arr[i])) {
ret.push(arr[i]);
}
}
return ret;
}
3、使用 Set 数据结构(ES6+)
function unique(arr) {
return [...new Set(arr)];
}
function unique(arr) {
return Array.from(new Set(arr));
}
4、使用 Array.prototype.filter() 方法(ES6+)
function unique(arr) {
return arr.filter((value, index, self) => {
return self.indexOf(value) === index;
});
}
5、使用 Array.prototype.reduce() 方法(ES6+)
function unique(arr) {
return arr.reduce((accumulator, currentValue) => {
if (!accumulator.includes(currentValue)) {
accumulator.push(currentValue);
}
return accumulator;
}, []);
}
6、使用 Array.prototype.find() 方法(ES6+)
function unique(arr) {
let uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
if (!uniqueArr.find(element => element === arr[i])) {
uniqueArr.push(arr[i]);
}
}
return uniqueArr;
}