数组去重 : js基础高频面试题。 js作者没有封装数组去重的方法。
var arr = [20,50,60,80,20,50,88];// [20,50,60,80,88]
方式一 : 排序法去重 (最好理解,性能最低)
//1.对arr排序
// arr.sort(function(a,b){
// return a-b;
// });
// console.log(arr);
// //2.声明空数组存储去重后的数组
var newArr = [];
//3.遍历arr, 检查arr[i] 与 arr[i+1]是否一致
for(var i = 0;i<arr.length;i++){
if(arr[i] != arr[i+1]){
//添加到newArr
newArr.push(arr[i]);
};
};
console.log(newArr);
方式二 : 开关法去重 (不好理解,提现编程思想)
var arr = [20,50,60,80,20,50,88];// [20,50,60,80,88]
// //1.声明空数组存储去重后的数组
// var newArr = [];
// //2.遍历arr,检查arr[i] 在不在newArr中
// for(var i = 0;i<arr.length;i++){
// //3.开关法:检测arr[i]在不在newArr中
// //(1)假设不在 : true:可以添加 false:不可以添加
// var res = true;
// //(2)遍历newArr检查
// for(var j = 0;j<newArr.length;j++){
// if( arr[i] == newArr[j]){//在,不能添加
// res = false;
// break;
// };
// };
// //(3)通过res值来判断是否添加
// if(res){
// newArr.push(arr[i]);
// };
// };
// console.log(newArr);
方式三 : indexOf去重 (好理解,性能好,实际开发常用)
// var arr = [20,50,60,80,20,50,88];// [20,50,60,80,88]
// //1.声明空数组存储去重后的数组
// var newArr = [];
// //2.遍历arr,检查arr[i]在不在newArr中
// for(var i = 0;i<arr.length;i++){
// //3. newArr.indexOf() : 检查元素在不在newArr中
// if( newArr.indexOf(arr[i]) == -1 ){//不在
// newArr.push(arr[i]);
// };
// };
// console.log(newArr);
方式四 : 对象法去重 (最不好理解,提现所有的js语法精髓。最喜欢看别人用这种方式)
var arr = [20,50,60,80,20,50,88];// [20,50,60,80,88]
/*对象法去重核心思路 : 对象的属性名不能重复
* 将数组的元素作为对象的属性名 { "20" : 1 }
*/
var obj = {};//检测是否有重复元素
var newArr = [];//存储去重后的数组
for(var i = 0;i<arr.length;i++){
//将数组元素作为对象属性名
if(obj[ arr[i] ] == undefined){//没有重复
newArr.push(arr[i]);
obj[ arr[i] ] = 1;//下一次再出现重复元素,不会是undefined
};
};
console.log(newArr);