1. 程式人生 > >創造 101 種方法(下)

創造 101 種方法(下)

6、map

function demo6(ary){		
	var res = [];			
	ary.sort().map((current)=>{
		if(res.length == 0 || res[res.length-1] !== current){					
			res.push(current)
		}	
	});
	console.log(res);
}
demo6(arr);

結果:[0, "1", 1, 10, 2, 3, 4, 5, "6", 6, 7, 8, 9, false, "false", null, true, "大唐", "盛世", undefined]

7、filter

function demo7(ary){		
	var res = [];			
	ary.sort().filter((current)=>{
		if(res.length == 0 || res[res.length-1] !== current){					
			res.push(current)
		}	
	});
	console.log(res);
}
demo7(arr);

結果:[0, "1", 1, 10, 2, 3, 4, 5, "6", 6, 7, 8, 9, false, "false", null, true, "大唐", "盛世", undefined]

8、forEach

function demo8(ary){		
	var res = [];			
	ary.sort().forEach((current)=>{
		if(res.length == 0 || res[res.length-1] !== current){					
			res.push(current)
		}	
	});
	console.log(res);
}
demo8(arr);

結果:[0, "1", 1, 10, 2, 3, 4, 5, "6", 6, 7, 8, 9, false, "false", null, true, "大唐", "盛世", undefined]

不難看出,reduce、map、filter、forEach 去重的原理是一樣的,
另外,把  if 部分換成 indexOf :res.indexOf(current) === -1 && res.push(current)  結果也完全一樣

9、遞迴

var i = 0,
    res =[];
arr = arr.sort();
function demo9(i){	
	if(i>=0 && i <= arr.length){		
		res.indexOf(arr[i]) === -1 && res.push(arr[i]);
		i++;
		demo9(i)
	}
}		
demo9(i);
console.log(res);

結果:[0, "1", 1, 10, 2, 3, 4, 5, "6", 6, 7, 8, 9, false, "false", null, true, "大唐", "盛世", undefined] 

10、Set

function demo10(ary){
	var res = [...new Set(ary.sort())];
	console.log(res);
}
demo10(arr);

結果:[0, "1", 1, 10, 2, 3, 4, 5, "6", 6, 7, 8, 9, false, "false", null, true, "大唐", "盛世", undefined]

11、Map

此 Map 非 彼 map

function demo11 (arr) { 
	const seen = new Map(); 
	var res = arr.filter((a) => !seen.has(a) && seen.set(a, 1));
	console.log(res);
}
demo11(arr.sort());

結果:[0, "1", 1, 10, 2, 3, 4, 5, "6", 6, 7, 8, 9, false, "false", null, true, "大唐", "盛世", undefined]