前端面试算法题汇总(持续更新...)

1 篇文章 0 订阅

1.判断一段字符串是否为回文?
回文是指把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环。比如 abba,redder…
1.字符串转数组;2.用reverse()函数颠倒;3.使用join(’’)拼接成字符串

function reverseFn( str ) {
	let normalized = str.toLowerCase().match(/[a-z]/gi).reverse()
    return normalized.join('') === normalized.reverse().join('')
}

2.数组去重
1.直接双重遍历

 var arr = [1,2,3,3,4,3,5,3,7,5];
  function removeRepetition(arr) {
     for(var i = 0; i < arr.length-1; i++){
         for(var j = i+1; j < arr.length; j++){
             if(arr[i]==arr[j]){
               arr.splice(j,1);//console.log(arr[j]);
                j--;
            }
        }
    }
    return arr; 
}

2.用indexOf()方法

var arr = [1,2,3,3,4,3,5,3,7,5];
var arr1 = [];
function removeRepetition(arr) {
	for(var i = 0;i < arr.length; i++) {
		if(arr1.indexOf(arr[i]) == -1){
			arr1.push(arr[i])
		}
	}
	return arr1;
}

3.用fifter方法

var arr = ['apple','strawberry','banana','pear','apple','orange','orange','strawberry'];
var r = arr.filter(function(element,index,self){
    return self.indexOf(element) === index;
 });
 console.log(r);

4.使用ES6的Set

const removeDuplicateItems = arr => [...new Set(arr)];
removeDuplicateItems([42, 'foo', 42, 'foo', true, true]);

3.对象去重

var arr = [{
      key: '01',
       value: '乐乐'
    }, {
       key: '02',
       value: '博博'
    }, {
       key: '03',
       value: '淘淘'
   },{
       key: '04',
      value: '哈哈'
   },{
      key: '01',
      value: '乐乐'
   }];


var result = [];
   var obj = {};
   for(var i =0; i<arr.length; i++){
      if(!obj[arr[i].key]){
         result.push(arr[i]);
         obj[arr[i].key] = true;
     }
}
console.log(result);

4.统计一个字符串出现最多的字母

var str = "aaabbbbccc"; 
function findMaxDuplicateChar(str) {  
  if(str.length == 1) {
    return str;
  }
  let charObj = {};
  for(let i=0;i<str.length;i++) {
    if(!charObj[str.charAt(i)]) {
      charObj[str.charAt(i)] = 1;
    }else{
      charObj[str.charAt(i)] += 1;
    }
  }
  let maxChar = '',
      maxValue = 1;
  for(var k in charObj) {
    if(charObj[k] >= maxValue) {
      maxChar = k;
      maxValue = charObj[k];
    }
  }
  return maxChar;

}
findMaxDuplicateChar(str)

5.排序算法

function bubbleSort(arr) {  
    for(let i = 0,l=arr.length;i<l-1;i++) {
        for(let j = i+1;j<l;j++) { 
          if(arr[i]>arr[j]) {
                let tem = arr[i];
                arr[i] = arr[j];
                arr[j] = tem;
            }
        }
    }
    return arr;
}

6.判断js中的数据类型方法
js中共有七种数据类型 ES6新增Symbo,其中除去 undefined; null ; 0 ; NaN; ’ ';为false 其他都为 true
1)typeof 方法

var obj = {'age':'14'}
var arr = ['a','b','c']
var str = 'hello'
var bool = true
var num = 1
var n = null
var fn = function(n){
        console.log(n)
    }
	
console.log(typeof obj)    // object
console.log(typeof arr)    // object
console.log(typeof str)    // string
console.log(typeof bool)    // boolean
console.log(typeof num)    // number
console.log(typeof n)    // object
console.log(typeof fn)    // function

由上可知,typeof方法 不能区分 Array 和 Object
2) instanceof

var obj = {'age':'14'}
var arr = ['a','b','c']
var str = 'hello'
var bool = true
var num = 1
var n = null
var fn = function(n){
        console.log(n)
    }
console.log(obj instanceof Object)  // true
console.log(arr instanceof Array)    // true
console.log(str instanceof String)    // false
console.log(bool instanceof Boolean)    // false
console.log(num instanceof Number)    // false
console.log(n instanceof Object)    // false
console.log(fn instanceof Function)    // true

由上可知,instanceof 方法只能判断 Object 和 Array 原始数据类型的值无法判断
此方法也不能很好地区分Array和Object

var arr = [1,2,3,4];
arr.instanceof Object

此结果也为true
3) constructor 方法

var obj = {'age':'14'}
var arr = ['a','b','c']
var str = 'hello'
var bool = true
var num = 1
var n = null
var fn = function(n){
        console.log(n)
    }
console.log(obj.constructor == Object)  // true
console.log(arr.constructor == Array)  // true
console.log(str.constructor == String)  // true
console.log(bool.constructor == Boolean)  // true
console.log(num.constructor == Number)  // true
console.log(fn.constructor == Function)  // true
4) toString() 方法 
var obj = {'age':'14'}
var arr = ['a','b','c']
var str = 'hello'
var bool = true
var num = 1
var n = null
var fn = function(n){
        console.log(n)
    }
console.log(Object.prototype.toString.call(obj))    // [object Object]
console.log(Object.prototype.toString.call(arr))    // [object Array]
console.log(Object.prototype.toString.call(str))    // [object String]
console.log(Object.prototype.toString.call(bool))    // [object Boolean]
console.log(Object.prototype.toString.call(num))    // [object Number]
console.log(Object.prototype.toString.call(n))    // [object Null]
console.log(Object.prototype.toString.call(fn))    // [object Function]

推荐使用 toString() 方法!

  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值