拼多多2019前端笔试题解

总共八道简答题。由于不能用IDE,只能靠记忆了
第一题:判断输出结果。
答案:[1,2,3,1,1,2]

第二题:字符串全排列
剑指offer原题,可以用递归交换的思路,也可以用回溯法
回溯法:
function Permutation(str)
{
    let res=[],pStr="";
    if(str.length<=0) return res;
    arr=str.split("");//将字符串转化为字符数组
    res=permutate(arr,pStr,res);
    return res;
}
function permutate(arr,pStr,res){
    if(arr.length==0){
        return res.push(pStr);
    }else{
        let isRepeated=new Set();
        for(let i=0;i<arr.length;i++){
            if(!isRepeated.has(arr[i])){//避免相同的字符交换
                let char=arr.splice(i,1)[0];
                pStr+=char;
                permutate(arr,pStr,res);
                arr.splice(i,0,char);//恢复字符串,回溯
                pStr=pStr.slice(0,pStr.length-1);//回溯
                isRepeated.add(char);
            }
        }
    }
    return res;
}
递归全排列法:
function Permutation(str)
{
    let res=[];
    if(str.length<=0) return res;
    arr=str.split("");//将字符串转化为字符数组
    res=permutate(arr,0,res);
    res=[...new Set(res)];//去重
    res.sort();//排序
    return res;
}
function permutate(arr,index,res){
    if(arr.length==index){
        let s="";
        for(let i=0;i<arr.length;i++){
            s+=arr[i];
        }
        return res.push(s);
    }else{
        for(let i=index;i<arr.length;i++){
            [arr[index],arr[i]]=[arr[i],arr[index]];//交换
            permutate(arr,index+1,res);
            [arr[index],arr[i]]=[arr[i],arr[index]];//交换
        }
    }
    return res;
}

第三题:找出数组中重复数字
function findSame(arr) {
    let map = {}, res=[];
    for (let i = 0; i < arr.length; i++) {
        if (!map[arr[i]]) {
            map[arr[i]] = 1;
        } else {
            map[arr[i]]++;
        }
    }
    for (let i in map) {
        if (map[i] > 1) {
            res.push(i);
        }
    }
    return res;
}

第四题:转换obj
var obj =[
    {id: 1, parent: null},
    {id: 2, parent: 1},
    {id: 3, parent: 2},
]
function transform(obj, index) {
    let node;
    if(obj.length - 1 == index){
        node = {
            id: obj[index].id,
            parent: obj[index].parent
        }
    }else{
        node = {
            id: obj[index].id,
            parent: obj[index].parent,
            child: transform(obj,++index)
        }
    }
    return node;
}
let obj2 = {
    obj: transform(obj, 0)
}
console.log(obj2);

第五题:实现log函数
function log(...args){
    let str = args.join(" ");
    return "(app)"+str;
}

第六题:实现继承。
继承主要是通过原型链来实现的,在这里主要实现下组合继承
function SuperType(){}
function SubType(){
    SuperType.call(this,...args);//args为一些需要继承的属性
}
SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType(); 

第七题:let a = new A("test");发生了什么?
1.先对A构造函数RHS查询标识符。
2.使用new 调用构造函数A
//创建一个新的对象,并设置__proto__
//将构造函数的作用域赋值给新对象(因此this就指向了这个新对象)
//执行函数中的代码(为这个对象添加新的属性)
//返回这个新的对象
3.创建变量a,并把之前的调用结果赋值给变量a
下面是new的原理实现
//实现一个new方法
function New(f) {
    //返回一个func
    return function () {
        var o = {"__proto__": f.prototype};
        f.apply(o, arguments);//继承父类的属性
        return o; //返回一个Object
    }
} 


第八题:dom操作

let p = document.createElement("p");
p.setAttribute("class", "pdd-slogan");
p.textContent = "多拼多实惠"

div.appendChild(p);

document.body.appendChild(div); 

#拼多多##题解##前端#
全部评论
大佬之前没投提前批吗?
点赞 回复 分享
发布于 2018-08-30 22:11
厉害了
点赞 回复 分享
发布于 2018-08-30 23:53

相关推荐

不愿透露姓名的神秘牛友
11-27 10:52
点赞 评论 收藏
分享
冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
8
76
分享
牛客网
牛客企业服务