数组去重
1. es6
var arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
function unique1(arr){
if(!Array.isArray(arr)){
console.log('type error');
return
}
return [...new Set(arr)]
}
复制代码
2. indexOf()
function unique2(arr){
var res=[]
arr.forEach((item,index)=>{
if (arr.indexOf(item) == index) {
res.push(item)
}
})
return res
}
复制代码
3. sort与reduce()
function unique3(arr) {
arr.sort((a, b) => a - b);
var res=[arr[0]];
for(var i=1;i<arr.length;i++){
if(arr[i]!==arr[i-1]){
res.push(arr[i])
}
}
return res
}
console.log(unique3(arr));
复制代码
4. includes与reduce()
function unique4(arr) {
return arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
}
复制代码
5. 利用Map()去重
function unique5(arr) {
if (!Array.isArray(arr)) {
console.log('type error');
return
}
let map =new Map();
let res=[];
for(let i=0,l=arr.length;i<l;i++){
if(map.has(arr[i])){
map.set(arr[i], true);
}else{
map.set(arr[i], false);
res.push(arr[i])
}
}
console.log(map);
return res
}
复制代码
6. 利用for嵌套for,然后splice去重(ES5中最常用
function unique6(arr){
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
}
复制代码
7. 利用indexOf()去重
function unique7(arr) {
var res=[];
arr.forEach((item)=>{
if(res.indexOf(item)<0){
res.push(item)
}
})
return res
}
复制代码
8. filter()
function unique8(arr) {
var res ;
res = arr.filter((item,i) => {
return arr.indexOf(item)==i
})
return res
}
复制代码
9. map()扩展 计算两数之和
function sum(arr,target){
let map = new Map();
for (let i = 0, l = arr.length; i < l; i++) {
if(map.has(arr[i])){
return [map.get(arr[i]),i]
}else{
map.set(target - arr[i],i)
}
}
}
复制代码