前端开发工程师 面试题(含解决方案)

前端开发用什么语言|小程序前端开发用什么语言|前端搭建开发环境搭建

判断一个字符串中出现次数最多的字符,统计这个次数

javascript 代码

if (typeof String.prototype.countCharacters !== ‘function’) {
    String.prototype.countCharacters = function() {
        var i,
            letter,
            obj = {},
            len = this.length
        for (i = 0; i < len; i++) {
            letter = this[i]
            if (!obj[letter]) {
                obj[letter] = 1
            } else {
                obj[letter]++
            }
        }
        var max_key,
            max_num = 0
        for (var key in obj) {
            if (max_num < obj[key]) {
                max_num = obj[key]
                max_key = key
            }
        }
        return { max_key: max_key, max_num: max_num }
    }
}
var str = ‘abcdefgsdds’
var oNew = str.countCharacters()
console.log(
    ‘出现次数最多的字母是’ + oNew.max_key + ‘,共出现了’ + oNew.max_num + ‘次.’,
)
编写一个方法,求一个字符串的字节长度(假设一个中文占两个字节)

javascript 代码

var str = ’22粮食’
console.log(getStrlen(str))
function getStrlen(str) {
    var json = { len: 0 }
    // <!– 基本汉字 Unicode 编码范围[4E00,9FA5] –>
    var reg = /[\u4E00-\u9FA5]/
    for (var i = 0; i < str.length; i++) {
        if (reg.test(str.charAt(i))) {
            json.len++
        }
    }
    return json.len + str.length
}
编写一个方法实现数组去重

第一种是比较常规的方法
思路:
1.构建一个新的数组存放结果
2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比
3.若结果数组中没有该元素,则存到结果数组中
javascript 代码

function delArrRepeat(oldArr) {
    var newArr = [oldArr[0]],
        len = oldArr.length
    for (var i = 1; i < len; i++) {
        if (newArr.indexOf(oldArr[i]) == -1) {
            newArr.push(oldArr[i])
        }
    }
    return newArr
}
console.log(delArrRepeat([1, 2, 1, 2, 3, 5, 6, 8, 4, 5]))
if (typeof Array.prototype.delArrRepeat !== ‘function’) {
    Array.prototype.delArrRepeat = function() {
        var newArr = [this[0]],
            len = this.length
        for (var i = 1; i < len; i++) {
            if (newArr.indexOf(this[i]) == -1) {
                newArr.push(this[i])
            }
        }
        return newArr
    }
}
alert([1, 2, 1, 2, 3, 5, 6, 8, 4, 5].delArrRepeat())
console.log([1, 2, 1, 2, 3, 5, 6, 8, 4, 5].delArrRepeat()) //这是神马情况,本地运行的好好的

第二种方法比上面的方法效率要高
思路:
1.先将原数组进行排序
2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
3.如果不相同,则将该元素存入结果数组中

javascript 代码

Array.prototype.delArrRepeat = function() {
    this.sort() //先排序
    var newArr = [this[0]],
        len = this.length
    for (var i = 1; i < len; i++) {
        var lastNum = newArr.length – 1
        if (this[i] !== newArr[lastNum]) {
            newArr.push(this[i])
        }
    }
    return newArr
}
alert([1, 2, 1, 2, 3, 5, 6, 8, 4, 5].delArrRepeat())
console.log([1, 2, 1, 2, 3, 5, 6, 8, 4, 5].delArrRepeat())

第三种方法(推荐使用)
思路:
1.创建一个新的数组存放结果
2.创建一个空对象
3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,
并赋值为1,存入到第2步建立的对象中。
说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。
javascript 代码

Array.prototype.delArrRepeat = function() {
    var newArr = []
    var obj = {}
    for (var i = 0; i < this.length; i++) {
        if (!obj[this[i]]) {
            newArr.push(this[i])
            obj[this[i]] = 1
        }
    }
    return newArr
}
alert([1, 2, 1, 2, 3, 5, 6, 8, 4, 5].delArrRepeat())
如何使用原生JavaScript代码深度克隆一个对象(注意区分对象类型)

javascript 代码

function deepClone(oldObj, newObj) {
    var newObj = newObj || {} //如果存在newObj就newObj,否则用空对象
    for (var key in oldObj) {
        if (oldObj.hasOwnProperty(key)) {
            //判断是不是对象的自身属性
            if (typeof oldObj[key] === ‘object’) {
                //判断属性是否是引用类型的
                //如果是,在判断值是否是数组
                var c = oldObj[key].constructor === Array ? [] : {}
                newObj[key] = deepClone(oldObj[key], c) //递归
            } else {
                //如果不是直接赋值
                newObj[key] = oldObj[key]
            }
        }
    }
    return newObj
}
var arr = [5, 8, 6, 4]
var oJson = { a: 6, b: 4, c: [1, 2, 3] }
var str = ‘sdfslk’
var arr2 = deepClone(arr)
var oJson2 = deepClone(oJson)
var str2 = deepClone(str)
console.log(arr)
console.log(arr2)
alert(‘—————————–‘)
console.log(oJson)
console.log(oJson2)
alert(‘—————————–‘)
console.log(str)
console.log(str2)

方法二
javascript 代码

function deepClone(oldObj) {
    var o = oldObj instanceof Array ? [] : {}
    for (var k in oldObj) {
        o[k] = typeof oldObj[k] === Object ? deepClone(oldObj[k]) : oldObj[k]
    }
    return o
}
var arr = [[1, 2, 3], [4, 5, 6, 7]]
var oJson = { a: 6, b: 4, c: [1, 2, 3] }
var str = ‘sdfslk’
var arr2 = deepClone(arr)
var oJson2 = deepClone(oJson)
var str2 = deepClone(str)
console.log(arr)
console.log(arr2)
alert(‘———————————‘)
console.log(oJson)
console.log(oJson2)
alert(‘———————————‘)
console.log(str)
console.log(str2)

请完成下面的函数功能,使其测试通过
javascript 代码

function string2int(s) {
    //请完成该函数
}
if (
    string2int(‘0’) === 0 &&
    string2int(‘12345’) === 12345 &&
    string2int(‘12300’) === 12300
) {
    if (string2int.toString().indexOf(‘parseInt’) !== -1) {
        alert(‘请勿使用parseInt()!’)
    } else if (string2int.toString().indexOf(‘Number’) !== -1) {
        alert(‘请勿使用Number()!’)
    } else {
        alert(‘测试通过!’)
    }
} else {
    alert(‘测试失败!’)
}

答案
javascript 代码

function string2int(s) {
    return s
        .split(”)
        .map(function(x) {
            return x – 0
        })
        .reduce(function(x, y) {
            var y = y || 0
            return x * 10 + y
        })
    //es6 箭头函数
    //return s.split(”).map(strNum => strNum * 1).reduce((x, y) => x * 10 + y);
}
if (
    string2int(‘0’) === 0 &&
    string2int(‘12345’) === 12345 &&
    string2int(‘12300’) === 12300
) {
    if (string2int.toString().indexOf(‘parseInt’) !== -1) {
        alert(‘请勿使用parseInt()!’)
    } else if (string2int.toString().indexOf(‘Number’) !== -1) {
        alert(‘请勿使用Number()!’)
    } else {
        alert(‘测试通过!’)
    }
} else {
    alert(‘测试失败!’)
}

前端开发2018年8月|web前端 开发文档|前端atom开发环境配置

» 本文来自:前端开发者 » 《前端开发工程师 面试题(含解决方案)》
» 本文链接地址:https://www.rokub.com/5162.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
64K

评论 抢沙发

评论前必须登录!