2022年6月面试字节二面的笔试题

614 阅读1分钟

字节二面面试题:

第一题:

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

\