前端面试 - 美团猫眼(秋招) - 手撕部分

323 阅读2分钟

前文

秋招到现在,不知道友友们收获如何?

这次来跟大家分享一下猫眼前端的面试经历(面试小姐姐很温柔,可惜笔者答得不咋地)

下面我们来看本次的三道手撕题

题目一:横线命名字符串转为驼峰命名字符串

题目要求:书写一个函数,将输入的字符串参数转为驼峰格式

样例1

输入:str = "zhang-wsd-sd-s"

输出:zhangWsdSdS

解题思路: 首先,使用split()函数将输入的字符串以"-"线拆分为数组arr

其次,遍历数组arr,将每个数组元素(第一个数组元素除外)首个字母转为大写

最后,使用join()函数拼接数组为字符串

  • 代码如下:
function a1(str) {
              let arr = str.split("-")
              for (let i = 1; i < arr.length - 1 ; i++) {
                   arr[i] = arr[i].slice(0, 1).toUpperCase() + arr[i].slice(1)
              }

              return arr.join("") 
         }

题目二:横线命名字符串转为驼峰命名字符串(使用正则表达式解)

题目要求:书写一个函数,将输入的字符串参数转为驼峰格式

样例1

输入:str = "zhang-wsd-sd-s"

输出:zhangWsdSdS

解题思路: 直接使用正则匹配前方有"-"线的字母,转为小写即可

  • 代码如下:
function a2(str) {
           return str.replace(/-([a-z])/g, function(match, p1) {
                     return p1.toUpperCase();
           });
           }

题目三:合并名称

题目要求:书写一个函数,接受一个数组作为参数,数组内部由各个对象组成,每个对象有age和name属性,将age一致的对象合并到一起,并且返回

样例1

输入: let arr = [ { age:1, name:"网" },{ age:2, name:"双" },{ age:1, name:"撒" }, { age:2, name:"旦" } ]

输出:arr = [ { age:1,name: ["网", "撒"] }, { age:2,name: ["双", "旦"] }]

解题思路:

首先,利用sort函数将数组元素按照age大小重新排序

其次,遍历数组arr,利用双指针,锁定相同元素的区间,使用一个新数组存储name属性的结果,当指针元素不一致时,说明需要头部指针后移,并且使用一个对象存储之前的age属性和name数组,并且将这个对象放置到最终结果数组中

最后,当尾部指针到达最后一位时,说明循环结束,此时虽然双指针元素一致,仍需头部指针后移,并且使用一个对象存储之前的age属性和name数组,并且将这个对象放置到最终结果数组中

  • 代码如下:
function a(arr) {
            arr.sort((a, b) => a.age - b.age)
            let j = 0,
            result = [],
            nameConcat = [],
            obj = {}

            for(let i = 0; i < arr.length; i++) {
                if (arr[j].age === arr[i].age) {
                    nameConcat.push(arr[i].name)
                }  else if (arr[j].age !== arr[i].age) {
                    obj = {}
                    obj.age = arr[j].age
                    obj.name = nameConcat
                    nameConcat = []
                    result.push(obj)
                    j = i
                    i--
                }   

                if (i === arr.length - 1) {
                    obj = {}
                    obj.age = arr[j].age
                    obj.name = nameConcat
                    nameConcat = []
                    result.push(obj)
                }   

            }

            return result
        }