平时会看到一些,或者其他分享的有趣的面试题。
特在此处整理。你问我为什么?
数组相关
分割数组
问题描述
写一个函数 xxx(n,m) 实现将1~n平均的分为m组,
如输入 xxx(5,2)
输出 [[1,2,3],[4,5]]
输入 xxx(10,6)
输出 [[1,2],[3,4],[5,6],[7,8],[9],[10]]
- 思路来源
const chunk = (arr, size) =>
Array.from({length: Math.ceil(arr.length / size)}, (v, i) => arr.slice(i * size, i * size + size));
- 最终结果
const chunk = (m,n)=>{
const arr = Array(m).fill(0).map((v,i)=>i);
const size = m-n;
return Array.from({length:n},(v,i)=>arr.slice(size*i,size*i+size));
}
思路
1. 填充数组arr
2. 根据要分割比例,计算每一份的大小,分割arr。
作用域
题目描述
如下代码将会输出什么结果
var a = 5;
function b(){
if(!a){
var a = 10;
}
console.log(a);
}
b();
本题考查函数作用域和变量提升。
分析
- js有三个作用域 global、块级作用域let,const(ES6新增)、function。if显然不是。
- 声明变量会在解析过程中提升到作用域顶部执行。
由此可得: 在函数体b
开始执行时,由于变量提升。 存在局部变量a
初始值undefinded
;所以最终答案是10
ES6相关
map+parseInt
题目描述
[1,7,11].map(parseInt) 输出结果为什么
要想弄清结果如何,必须先弄清这两个API的运作机制。
- map接受一个
callback(item,key,array,context)
回调函数。 - parseInt将参数按照约定类型转换,可接受两个参数。(str,radix)。radix是一个介于2~36之间的整数(对应进制类型);参数不填,或者为0默认是10进制
我们带入循环。
- 1=> parseInt(1,0); // 十进制结果 1
- 7=> parseInt(7,1); // 非法入参结果 NAN
- 10=>parseInt(10,2);// 二进制结果 3
算法相关
编程题,请写一个函数,完成以下功能
输入 ‘1, 2, 3, 5, 7, 8, 10’ 输出 ‘1~3, 5, 7~8, 10’
function transArr(str) {
return str.split(",").map((item, key, arr) => (arr[key + 1] != +item + 1 || key === 0 || arr[key - 1] != item - 1) ? item == +arr[key - 1] + 1 ? `,${item}` : item : ",").toString().replace(/(,)\1+/g, '~')
}
思路
- 标识符合位置 : [1,2,3,8,9,10] >> [1,undefined,’,3’,8,undefinded,’,10’]
- toString 去
undefinded
1,3,8,10 - 利用replace 替换
,,
为~
完成。
转载:https://blog.csdn.net/github_38725775/article/details/101027634
查看评论