美文网首页JS基础
JS面试题(算法题)

JS面试题(算法题)

作者: 凯凯frank | 来源:发表于2020-02-07 22:17 被阅读0次

1. 数组扁平化

//方法1 递归
var arr = [1,2,[3,4,[5,6,[6],8],9],[10,11,[12],13],14, 15]

function flatten(arr, result){
    if(!result){
        result = []
    }
    for(var i=0; i < arr.length; i++){
        if(Array.isArray(arr[i])){
            flatten(arr[i], result)
        }else{
            result.push(arr[i])
        }
    }
    return result
}
console.log(flatten(arr))

2.数据去重

function unique(arr){
    var map = {}, result = []
    for(var i=0;i < arr.length; i++){
        var item = arr[i]
        if(map[item]===undefined){
            result.push(item)
            map[item] = true
        }
    }
    return result
}
var arr = [2,3,23,2,4,3,2,4,5,6,7,8,2,2,3,4,5,6,7,1]
console.log(unique(arr))

3.对象的深拷贝

function deepClone1(source){
    return JSON.parse(JSON.stringify(source))
}

//递归
function deepClone(target){
    if(!target || typeof target!=='object'){
       return target
    }
    var result = Array.isArray(target) ? [] : {};
    for(var key in target){
        result[key] = deepClone(target[key])
    }
    return result
}

var mike ={name:'mike'}
var jack={name:'jack'}
var frank = {
    name: 'frank',
    age: 25,
    friends: [mike, jack],
    likes: [1,2,3,4,5]
}
var copy = deepClone(frank)
console.log(frank.friends[0] === mike)//true
console.log(copy.friends[0] === copy.friends[0])//true
console.log(frank.friends[0] === copy.friends[0])//false

4.函数的节流和防抖

参考我写的另一篇

5.实现(5).add(3).minus(2)

function checkNum(n){
    //n = Number(n)
    //return isNaN(n) ? 0 : n;
    return (n = Number(n)) && isNaN(n) ? 0 : n
}
Number.prototype.add = function(n){
    n = checkNum(n)
    return this + n
}
Number.prototype.minus = function(n){
    n = checkNum(n)
    return this - n
}

consoe.log((5).add(3).minus(2))

6.实现一个each, callback中return false可以打断each

function each(arr, callback){
    for(var i=0; i<arr.length; i++){
        var flag = callback.call(arr, arr[i], i);
        if(flag === false){
            break
        }
    }
}

each([2,3,4,1], function(item, index){
    console.log(item, index)
    if(index ===2){
        return false
    }
})

7. 把一个字符串的大小写取反 例如 'Abc' => 'aBC'

//方法1,遍历每一个
function invertStr(str){
    var upperCaseReg = /^[A-Z]$/
    var charReg = /^[a-zA-Z]$/
    return str.split('').map((item)=>{
        if(charReg.test(item)){
            if(upperCaseReg.test(item)){
                return item.toLowerCase();
            }else{
                return item.toUpperCase();
            }
        }else{
            return item
        }
    }).join('')
}
var str  = 'A地方bc23'
console.log(invertStr(str))
//方法二
str = str.replace(/[a-zA-Z]/g, content => {
    console.log(content)
    if(/[A-Z]/.test(content)){
        return content.toLowerCase();
    }else{
        return content.toUpperCase();
    }
})
console.log(str)

8. 实现一个字符串匹配算法,从字符串S中,查找字符串T,存在返回所在位置,不存在返回-1(也就是自己实现indexOf方法)

//方法1,循环
function myIndexOf(s, t){
    var lenT = t.length;
    for(var i=0; i <= s.length - lenT;  i++){
        if(s.substr(i, lenT) === t){
            return i
        }
    }
    return -1
}
var s = 'lksjdfherelkjsdf'
var t = 'here'
console.log(myIndexOf(s,t))
//方法2,正则
function myIndexOf2(s, t){
    var reg = new RegExp(t)
    var res = reg.exec(s)
    return res === null ? -1 : res.index
}
var s = 'lksjdfherelkjsdf'
var t = 'here'
console.log(myIndexOf2(s,t))

JS面试题(概念篇)

未完待续


喜欢的朋友点个赞吧

相关文章

网友评论

    本文标题:JS面试题(算法题)

    本文链接:https://www.haomeiwen.com/subject/bcnvxhtx.html