虽然没有一次面试遇到过这个题目,估计是考烂了不想考。。。但还是记录一下,毕竟知名度这么高的一个题目是吧?
1.双重for循环加splice()
function unique(arr){
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i]==arr[j]){
arr.splice(j,1);
j--;
}
}
}
return arr;
}
2.includes()
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
var newArr =[];
for(var i = 0; i < arr.length; i++) {
if(!array.includes(arr[i])) {
array.push(arr[i]);
}
}
return newArr;
}
3.indexOf()
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i]) === -1) {
array.push(arr[i])
}
}
return newArr;
}
4.ES6中的Set()
function unique(arr){
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
return Array.from(new Set(arr));
}
5.sort()
function unique(arr){
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
arr = arr.sort((a,b)=>a-b);
var newArr = [arr[0]];
var index = 0;
for(var i = 1; i < arr.length; i++){
if(newArr[index] === arr[i]) continue;
index++;
newArr.push(arr[i]);
}
return newArr;
}
6.hasOwnProperty()
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
var obj = {};
return arr.filter(item => {
return obj.hasOwnProperty(item) ? false : (obj[item] = true)
})
}
7.filter()
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
return arr.filter((item,index) => {
return arr.indexOf(item,0) === index;
})
}
8.reduce()和includes()
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
return arr.reduce((pre,cur) => pre.includes(cur) ? pre : [...pre, cur],[])
}
9.递归去重
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
arr.sort((a,b) => a - b);
function loopFn(index){
if(index > 0){
if(arr[index] === arr[index-1]){
arr.splice(index,1);
}
loopFn(index-1);
}
}
loopFn(arr.length-1);
return arr;
}
10.ES6中的Map数据结构
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
let m = new Map();
let newArr = [];
for(let i = 0; i < arr.length; i++){
if(m.has(arr[i])){
m.set(arr[i],true);
continue;
}
m.set(arr[i],false);
newArr.push(arr[i]);
}
return newArr;
}
11.利用对象的特性
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
var newArr= [];
var obj = {};
for (var i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
newArr.push(arr[i])
obj[arr[i]] = 1
} else {
obj[arr[i]]++
}
}
return newArr;
}
12.ES6中的展开运算符和Set()
function unique(arr){
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
return [...new Set(arr)] // 去重,有时候就是这么简单
}
网友评论