美文网首页
字节跳动一面

字节跳动一面

作者: 可爱多小姐 | 来源:发表于2020-08-10 00:01 被阅读0次

1、对象数组去重
https://blog.csdn.net/sunnyboysix/article/details/102815792

        function uniqueByKeys(obj, keys) {
            var uniques = [];
            var stringify = {};
            for (var i = 0; i < obj.length; i++) {
                var str = " ";    //没有考虑边界问题,这里存在问题【数字1 == 字符串“1” 】
                for (var j = 0; j < keys.length; j++) {
                    str += JSON.stringify(keys[j]);
                    str += JSON.stringify(obj[i][keys[j]])  //此处还可以优化,这里相当于循环嵌套
                }
                if (!stringify.hasOwnProperty(str)) {
                    uniques.push(obj[i]);
                    stringify[str] = true
                }
            }
            return uniques;
        }

数组去重三种方法
下面的三个方法:distinct1和distinct2保留元数据,获取去重后的新数组,distinct3是直接对元数据进行修改的。

// 方法一
function distinct1(arr,key){
    var newobj = {},newArr = [];
    for(var i=0;i<arr.length;i++){
        var item = arr[i];
        if(!newobj[item[key]]){
            newobj[item[key]] = newArr.push(item);
        }
    }
    return newArr;
}
// 方法二
function distinct2(arr,key){
    var newArr = [];
    for(var i=0;i<arr.length;i++){
      var flag = true;
      for(var j=0;j<newArr.length;j++){
        if(arr[i].id == newArr[j].id){
          flag = false;
               break
        };
      }; 
      if(flag){
        newArr.push(arr[i]);
      };
    };
    return newArr;
}
 
// 方法三, 方法三会更改数组的原始数据
function distinct3(arr, key){
    for(let i = 0; i < arr.length; i++) {
        for(let j = i+1; j < arr.length; j++) {
            if(arr[i][key] === arr[j][key]){
                arr.splice(j, 1);
                j = j-1;
            }
        }
    }
    return arr;
}

2、手写深拷贝

function deepClone (obj) {
    let newObj;
    if (Array.isArray(obj)) { // 判断复制的目标是不是数组
        newObj = [];
    } else if (typeof obj === 'object') {
        newObj = {};
    } else {
        newObj = obj;
    };
    if (typeof obj === 'object') {
        for (item in obj) {  //面试官说如果这里使用for...in就不需要再做上面判断类型了,因为for...in循环的是key,for...of循环的才是value。
            if(obj.hasOwnProperty(item)) {
                if(obj[item] && typeof obj[item] === 'object') {
                    newObj[item] = deepClone(obj[item])
                } else {
                    newObj[item] = obj[item]
                }
            }
        }
    }
    return newObj;
}
let obj = {name:'小明',age:20}
newObj = deepClone(obj)

相关文章

  • 字节跳动面试题

    字节跳动面试题 历经4面,“跳进”字节跳动 字节跳动一面: 自我介绍 tcp和udp区别,应用场景 tcp三次握手...

  • 字节跳动一面

    1、对象数组去重https://blog.csdn.net/sunnyboysix/article/details...

  • 记字节跳动一面

    其实之前内推过字节跳动,不过那天做字节跳动笔试的时候状态不是很好(其实是自己太菜),所以笔试的时候被刷了。但是自己...

  • 字节跳动(前端一面)

    你觉得你做的项目里面,哪个成长比较大? 除了你提到的使用新技术以外,你有没有遇到过那些需要请教他人才能解决的问题?...

  • 手撕面经 - 精准打击

    校招2篇,实习1篇,会及时做出调整 字节跳动前端一面面经(感觉凉凉) [字节]一面凉经 腾讯暑期实习前端面经

  • 字节跳动一面凉经

    【每日一语】如果这世界上真有奇迹,那只是努力的另一个名字。生命中最难的阶段,不是没有人懂你,而是你不懂你自己。——...

  • 字节跳动 一面 凉经

    1.自我介绍 2. 简历中的项目深挖: (1)主要工作,具体落实流程。 (2)我说我负责用例设计,她问用例设计上遇...

  • 字节跳动2022校招/实习 内推

    ★【字节跳动|秋招|提前批|全岗位可投】●内有面试/简历建议 字节跳动 22 届校招研发提前批启动! 字节跳动20...

  • 字节跳动

    现实的棍棒,一点一点趋使着我们要成长,人总是会选择性的遗忘掉岁月中留下的伤,而苦累的生活,慢慢的会打磨去曾经那股登...

  • 字节跳动

    春节期间,徐峥导演的《囧妈》在网络上免费播出,引得很多人对徐峥的做法大加赞赏。那么对于购买了这部电影的字节跳动公司...

网友评论

      本文标题:字节跳动一面

      本文链接:https://www.haomeiwen.com/subject/plmrdktx.html