字节二面面试题:
第一题:
kebab-case snake_case 转 camelCase (字符串转小驼峰)
示例: kebab-case_snake_case -> kebabCaseSnakeCase
function changeStr(str) {
const strArr = str.split("_");
let newStr = strArr[0];
for(let i = 1; i < strArr.length; i++) {
newStr += strArr[i].slice(0, 1).toUpperCase() + strArr[i].slice(1, strArr[i].length);
}
return newStr;
}
console.log(changeStr("kebab_case_snake_case"))
第二题:
数组去重(要求2种以上实现方式)
function quChong(array) {
let newArray = [];
for(let i = 0; i < array.length; i++) {
if (!newArray.includes(array[i])) {
newArray.push(array[i])
}
}
return newArray;
}
function quChong2(array) {
return [...new Set(array)];
}
const array = [1,2,3,4,4,5,5,6];
console.log(quChong(array))
console.log(quChong2(array))
第三题:
斐波那契数列
特征:前2位数字是固定的,分别为0和1,从第三位开始,数字是前两数之和,以此类推
例如:0,1,1,2,3,5,8
要求:输入一个下标,求该下标对应的值
例如: 下标输入5, 第5位数列就是3
function sum(target) {
if (target == 2 || target == 3) {
return 1;
}
return sum(target - 1) + sum(target - 2);
}
// 想一想优化的写法?
第四题:
实现lodash中的groupBy(intput,item=>item.className)
function groupBy(array, arrayFn) {
const length = array.length;
let output = {};
for(let i = 0; i < length; i++) {
if (output[arrayFn(array[i])]) {
output[array[i].className].push(array[i]);
} else {
output[arrayFn(array[i])] = [array[i]];
}
}
return output;
}
console.log(groupBy(input, item=> item.className))
\