2022 || 初中级面试笔试题

198 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

听他基本都是前面问面试题,最后就问会两道笔试题。最近旁听大佬在面试总结了一下他问的笔试题。

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)

结果打印

image.png

5.数组对象去重

    const newArr = [
        {
          goodsId: '1',
          quota: 12,
          skuId: '1'
        },
        {
          goodsId: '2',
          quota: 12,
          skuId: '2'
        },
        {
          goodsId: '1',
          quota: 12,
          skuId: '1'
        }
      ]

利用filterMap特性去重

    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'))

结果打印

image.png

6.给一个数组,返回结果不要其中两个元素

let arr = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
返回结果 [10, 9, 6, 5, 4, 3, 2, 1]

方法1

可以利用 sliceconcat完成

   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地址

答案随便百度就有了

结语

其实还有一些的,记得不太清就不记录了,大半夜记性不太行。如果有帮助麻烦帮忙点个赞,如果有问题欢迎在评论区指出。