本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
听他基本都是前面问面试题,最后就问会两道笔试题。最近旁听大佬在面试总结了一下他问的笔试题。
1.关于字符串
let str = 'abc#name&defg'
1.1 字符串的翻转
方法1
首先利用
split('')
把字符串转为数组,然后reverse()
翻转数组,最后join('')
转回字符串
let str = 'abc#name&defg'
const res = str
.split('')
.reverse()
.join('')
console.log('res', res) // gfed&eman#cba
方法2
利用
for
从后边开始遍历然后拼接到一个新的字符串
let str = 'abc#name&defg'
let newStr = ''
for (let i = str.length - 1; i >= 0; i--) {
newStr += str[i]
}
console.log('newStr', newStr) // gfed&eman#cba
1.2 取出 name
先利用
indexOf()
获取前后的索引位置,然后用slice()
来切割字符串
let str = 'abc#name&defg'
const index1 = str.indexOf('#')
const index2 = str.indexOf('&')
const newName = str.slice(index1 + 1, index2)
console.log('newStr', newStr) // name
2.关于数组的
const arr = [1, [2, [3, [4, 5]]], 6]
const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a']
2.1 数组扁平化
方法1
直接使用
flat()
来进行扁平
const arr = [1, [2, [3, [4, 5]]], 6]
const res = arr.flat(Infinity)
console.log(res) // [1, 2, 3, 4, 5, 6]
方法2
使用
reduce
来进行扁平
const arr = [1, [2, [3, [4, 5]]], 6]
function fn (arr) {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? fn(cur) : cur)
}, [])
}
fn(arr) // [1, 2, 3, 4, 5, 6]
2.2 数组去重
方法1
利用ES6
[...new Set(arr)]
进行去重
const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a']
const res = [...new Set(arr)]
console.log(res) // [1, '1', 17, true, false, 'true', 'a']
方法2
利用遍历和
includes
进行去重
const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a']
let res = []
arr.forEach(item => {
if (!res.includes(item)) res.push(item)
})
console.log(res) // [1, '1', 17, true, false, 'true', 'a']
方法3
利用
filter
进行去重
const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a']
const res = arr.filter((item, index) => arr.indexOf(item) === index)
console.log(res) // [1, '1', 17, true, false, 'true', 'a']
3.不确定参数求总和
利用
reduce
进行求和
function sun (...arr) {
return arr.reduce((pre, cur) => {
return (pre += cur)
})
}
console.log(sun(1, 2, 3, 4, 5)) // 15
4.写一个sleep延时执行
function sllep (time) {
return new Promise(res => {
setTimeout(() => {
res(11111111)
}, time)
})
}
console.log(2222222)
this.sllep(2000).then(res => {
console.log(res)
})
console.log(3333333)
结果打印
5.数组对象去重
const newArr = [
{
goodsId: '1',
quota: 12,
skuId: '1'
},
{
goodsId: '2',
quota: 12,
skuId: '2'
},
{
goodsId: '1',
quota: 12,
skuId: '1'
}
]
利用
filter
和Map
特性去重
function uniqueFn (arr, uniId) {
const res = new Map()
return arr.filter(
item => !res.has(item[uniId]) && res.set(item[uniId], 1)
)
}
console.log('uniqueFn(newArr, uniId)', uniqueFn(newArr, 'skuId'))
结果打印
6.给一个数组,返回结果不要其中两个元素
let arr = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
返回结果 [10, 9, 6, 5, 4, 3, 2, 1]
方法1
可以利用
slice
和concat
完成
const res = arr.slice(0, 2).concat(arr.slice(3, 10))
console.log('res', res) // [10, 9, 6, 5, 4, 3, 2, 1]
方法2
可以利用
filter
完成
const res = arr.filter((item, index) => index !== 2)
console.log('res', res) // [10, 9, 6, 5, 4, 3, 2, 1]
7.手写防抖
const debounce = (fn, time) => {
let timer = null
return function () {
clearTimeout(timer)
timer = setTimeout(() => {
fn.apply(this)
}, time)
}
}
8.手写节流
const throttle = (fn, time) => {
let flag = true
return function () {
if (!flag) return
flag = false
setTimeout(() => {
fn.apply(this)
flag = true
}, time)
}
}
9.数组转树形结构数据(Tree)
感兴趣可以看这篇文章
10.正则
10.1 正则匹配手机号
...
10.2 正则匹配IP地址
答案随便百度就有了
结语
其实还有一些的,记得不太清就不记录了,大半夜记性不太行。如果有帮助麻烦帮忙点个赞,如果有问题欢迎在评论区指出。