一般大公司面试的时候,都会问一些常见的问题,但是这些问题看着简单,面试官问了怎么解决后,你说了一种,面试官又问还有吗,你又说了一种,还有吗,这时候你就要疯了,所有我们平常在工作中,不是解决这个问题就万事大吉了,还要想一想除了这个解决办法,还有哪些,尽量做些总结。
最常见的就是数组的去重问题,或者有哪些元素是重复元素或者不是重复元素,我来进行一次总结,想到的就是一下五种:
1 将数组的元素作为空对象的属性,然后进行累加,如果最后属性值是1,就不是重复元素,如果大于1就是重复元素,这种解法一般是数组里的元素是基本类型数组,如果是复杂类型就会失败
function clean(nums) {
var obj = Object.create(null);
var arr = [];
for(var i =0;i<nums.length;i++){
obj[nums[i]] ? obj[nums[i]]++:obj[nums[i]]=1;
}
for(let key in obj ){
if(obj[key] == 1){
arr.push(key)
}
}
return arr
};
2 使用ES中的Set
function clean(nums) {
return [...new Set(nums)] //或者 return Array.form(new Set(nums))
};
3 使用indexof,返回的值与当前的位置相同即可
function clean(nums) {
var arr = [];
for(let i=0;i<nums.length;i++){
if(nums.indexOf(nums[i]) == i){
arr.push(nums[i])
}
}
//或者也可以这么些 arr = nums.filter(item=>{nums.indexOf(nums[i]) == i});
return arr;
};
4 对数组进行排序,如果前面一个不等于后面一个即放入新数组
function clean(nums) {
var arr = [];
nums.sort(function(a,b){return a-b});
if(nums.length ==0) return [];
if(nums.length == 1) return [nums[0]]
if(nums[0] != nums[1]) arr.push(nums[0])
for(var i =1;i<nums.length;i++){
if(nums[i] != nums[i-1]){
arr.push(nums[i])
}
}
return arr;
};
5 双重循环,找到重复的删除,返回原数组
function clean(arr){
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length; j++) {
if (arr[i] == arr[j] && i != j) {//将后面重复的数删掉
arr.splice(j, 1);
}
}
}
return arr;
}
网友评论