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))
结果如下:
第二题
写一个方法,实现每一秒输出一个元素
[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)
结果如下:
第三题
给一个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))
结果如下:
第四题
用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('')}`
}
结果如下:
好了,上面四道题就是当时笔试内容。由于是完全手写,解码之前又没有接触过等,没有过。回过头整理整理,希望互相学习,欢迎评论。
上一篇: 苦菊怎么吃法,你知道方法吗
下一篇: 南朝第一帝:宋武帝刘裕的逆袭