您的位置:首页 > Web前端

收集的一些web前端面试笔试题笔试(答案)

2020-01-12 22:15 435 查看

这些题在笔试中出现的概率比较大(陆续补充中)

数组去重

//数组去重 遍历数组 数组区中方法有很多种 es6 提供了 new Set 也可以去重

function unique(arr){
var newarr = []
for(var i = 0; i<arr.length; i++){
if(newarr.indexOf(arr[i]) == -1){ // indexOf
newarr.push(arr[i])
}
}
return newarr
}

赋值

var a = {n:1}
var b = a
a.x = a = {n:2}
console.log(a.x) // undefined
console.log(b.x) // n:2

去除数组中指定的项

//去除数组中指定的项
var arr = [1, 2, 2, 3, 4, 2, 2]
function removeWithoutCopy(arr, item) {
for(var i = 0 ; i< arr.length;i++){
if(arr[i] == item) {
arr.splice(i,1)
i--
}
}
return arr
}

变量提升 函数最优先

var b = 10;
(function b(){ // 变量提升 函数优先级最高
b = 20
console.log(b) //  f b(){console.log(b)}
})()

柯里化函数

function a(x){
reutrn function (y){
return x+y
}
}

a(1)(2) //柯里化函数可以实现参数复用 而不用一次一次重新传入
// 柯里化函数面试题(可以了解一下)
// 实现一个add方法,使计算结果能够满足如下预期:
add(1)(2)(3) = 6;
add(1, 2, 3)(4) = 10;
add(1)(2)(3)(4)(5) = 15;

function add() {
// 第一次执行时,定义一个数组专门用来存储所有的参数
var _args = Array.prototype.slice.call(arguments);
// 在内部声明一个函数,利用闭包的特性保存_args并收集所有的参数值
var _adder = function() {
_args.push(...arguments);
return _adder;
};
// 利用toString隐式转换的特性,当最后执行时隐式转换,并计算最终的值返回
_adder.toString = function () {
return _args.reduce(function (a, b) {
return a + b;
});
}
return _adder;
}

add(1)(2)(3) // 6
add(1, 2, 3)(4) // 10
add(1)(2)(3)(4)(5) // 15
add(2, 6)(1) // 9

call apply bind 区别

// call apply bind 区别
call 和 apply,bind 都是改变this 指向 call apply 只是传入参数方式不同 都是直接执行, bind则是返回一个函数,需要手动执行
obj.call(null,arg1,arg2,arg3)
obj.apply(null,[arg1,arg2,arg3])
obj.bind(null, ‘arg1’)

对象的深度克隆

//对象的深度克隆

function clone(Obj) {
var buf;
if (Obj instanceof Array) {
buf = [];  //创建一个空的数组
var i = Obj.length;
while (i--) {
buf[i] = clone(Obj[i]);
}
return buf;
}else if (Obj instanceof Object){
buf = {};  //创建一个空对象
for (var k in Obj) {  //为这个对象添加新的属性
buf[k] = clone(Obj[k]);
}
return buf;
}else{
return Obj;
}
}

先写这么多后边陆续会补充面试中所遇到的面试 欢迎大家留言
最后有一道题
[1,2,3].map(parseInt) // 返回结果是什么?可以考虑一下哦

promise封装简单的请求

function getData (url) {
let promise = new Promise((resolve,reject) => {
// 创建ajax
// 1. 创建 XMLHttp
var xmlHttp = new XMLHttpRequest()
// 2. 监听发送
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
// 成功
resolve(xmlHttp.responseText)
} else {
// 失败
reject('请求失败')
}
}
}
// 3. 获取url
xmlHttp.open("GET",url)
xmlHttp.send()
})
return promise
}

原文链接:https://blog.csdn.net/qq_40411946/article/details/89842145

统计出现次数最多的字符

var str = 'asdfssaaasasasasaa';
var json = {};
for (var i = 0; i < str.length; i++) {
if(!json[str.charAt(i)]){
json[str.charAt(i)] = 1;
}else{
json[str.charAt(i)]++;
}
};
var iMax = 0;
var iIndex = '';
for(var i in json){
if(json[i]>iMax){
iMax = json[i];
iIndex = i;
}
}
console.log('出现次数最多的是:'+iIndex+'出现'+iMax+'次');

统计素组中出现次数最多的元素

var arr = [3, 5, 6, 5, 9, 8, 10, 5, 7, 7, 10, 7, 7, 7, 7, 10, 10, 10, 10, 10]
function findMost (arr) {
if (!arr.length) return;
if (arr.length === 1) return 1;
let res = {};
let maxName, maxNum = 0
// 遍历数组
arr.forEach((item) => {
if(res[item]) {
res[item] +=1
} else {
res[item] = 1
}
console.log(res[item])
if (res[item] > maxNum) {
maxName = item
maxNum = res[item]
}
})
return '出现次数最多的元素为:' + maxName + ', 出现次数为:' + maxNum;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
小孩跑啥 发布了2 篇原创文章 · 获赞 0 · 访问量 145 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: