欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2021面试字节跳动web工程师笔试题

程序员文章站 2022-06-09 12:52:11
...

第一题

[
{num: 12, city: ‘beijing’},
{num: 56, city: ‘shanghai’},
{num: 167, city: ‘guangzhou’},
{num: 23, city: ‘shenzhen’},
{num: 45, city: ‘caoxian’}
]
写一个方法实现把上面的数组转换成下面这种格式:
{beijing: 12, shanghai: 56,…}

解析
只要把数组遍历循环然后再向一个对象中插入就好了,代码如下:

// 这里用的map,也可以用for...of,foreach,for等
let obj = [
  {num: 12, city: 'beijing'},
  {num: 56, city: 'shanghai'},
  {num: 167, city: 'guangzhou'},
  {num: 23, city: 'shenzhen'},
  {num: 45, city: 'caoxian'}
]
let getObj = (arr) => {
  const parmaObj = {}
  arr.map(item => {
    parmaObj[item.city] = item.num
  })
  return parmaObj
}
console.log(getObj(obj))

结果如下:
2021面试字节跳动web工程师笔试题

第二题

写一个方法,实现每一秒输出一个元素
[1, 2, 3, 4, 5, 6] ----> 1…2…3…

解析
循环遍历这个数组,高阶函数包着一个定时器返回就可以了,代码如下:

let numList = [1, 23, 45, 56, 76, 75, 98, 100]
let getParamsSecond = (arr) => {
  for (let i = 0; i < arr.length; i++) {
    (() => {
      setTimeout(() => {
        console.log(arr[i])
      }, 1000 * i);
    })()
  }
}
getParamsSecond(numList)

结果如下:
2021面试字节跳动web工程师笔试题

第三题

给一个url:http://www.baidu.com/?user=leaf&age=10&id=123&city=%E5%8C%97%E4%BA%AC&city=%E4%B8%8A%E6%B5%B7
要求:
重复出现的 key 要组装成数组,能被转成数字的就转成数字类型
解析出中文

代码如下:

let url = 'http://www.baidu.com/?user=leaf&age=10&id=123&city=%E5%8C%97%E4%BA%AC&city=%E4%B8%8A%E6%B5%B7&student'
let getQueryString = (url) => {
  // 如果不是字符串直接返回空对象
  if (typeof url !== 'string') return {}
  // 声明返回值对象
  const res = {},str = url.substr(url.indexOf('?')+1)
  // 声明临时模板,key,value,相同key存放的value数组
  let tmp, key, value, newValue
  // 解析成中文
  // decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码
  const arr = decodeURI(str).split('&')
  for (let i=0;i<arr.length;i++) {
    tmp = arr[i].split('=')
    key = tmp[0]
    // 如果出现key值没有value 默认返回true属性
    value = tmp[1] || true
    if (typeof value === 'string' && !isNaN(Number(value))) {
      value = Number(value)
    }
    // 如果key没有出现过(可能是0 或者false)
    if (typeof res[key] === 'undefined') {
      res[key] = value
    } else {
      // 上面判断第一次出现city的key值时,默认存放进去是 city: '北京' 这种格式,要转换成数组形式以便存放下一个value
      newValue = Array.isArray(res[key]) ? res[key] : [res[key]]
      newValue.push(value)
      res[key] = newValue
    }
  }
  return res
}
console.log(getQueryString(url))

结果如下:
2021面试字节跳动web工程师笔试题

第四题

用vue/react框架实现一个input输入框输入数字自动转化为千位制
即:123,456,789

代码如下:

let money = '1234522234.2341'
// 这里又处理了可以自动保留几位小数,即参数n
let getThousand = (str, n) => {
  if (!str) return str
  let _str = str.split('.')
  let reg = /\d{1,3}(?=(\d{3})+$)/g
  let params = _str[0].replace(reg, '$&,')
  return _str.length > 1 && _str[1] ? `${params}.${Number(_str[1].substr(0, n))}` : `${params}.${new Array(n).fill(0).join('')}`
}

结果如下:
2021面试字节跳动web工程师笔试题
好了,上面四道题就是当时笔试内容。由于是完全手写,解码之前又没有接触过等,没有过。回过头整理整理,希望互相学习,欢迎评论。