• 面试题数组篇(1)


    前端面试中,数组是少不了的。因为数组使用度比较频繁,我在项目中就经常使用。JavaScript拼接Html,数据结构计算,等等。

    汇总一下面试中数组会问到的几个问题,这个问题在面试经常被问到,但是一般同学都不太熟悉。不全面的大家可以留言补充。

     

    1、数组有哪些方法,常用的有哪几个

    Array 对象属性

    属性描述
    constructor 返回对创建此对象的数组函数的引用。
    length 设置或返回数组中元素的数目。
    prototype 使您有能力向对象添加属性和方法。

     

    Array 对象方法 (14个,前面9个都比较常用)

    方法描述
    concat() 连接两个或更多的数组,并返回结果。
    join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
    pop() 删除并返回数组的最后一个元素
    push() 向数组的末尾添加一个或更多元素,并返回新的长度。
    reverse() 颠倒数组中元素的顺序。
    shift() 删除并返回数组的第一个元素
    slice() 从某个已有的数组返回选定的元素
    sort() 对数组的元素进行排序
    splice() 删除元素,并向数组添加新元素。
    toSource() 返回该对象的源代码。
    toString() 把数组转换为字符串,并返回结果。
    toLocaleString() 把数组转换为本地数组,并返回结果。
    unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
    valueOf() 返回数组对象的原始值

     

    表格摘自w3school网站,点击方法和属性,可以链接到网站查看。

    这些方法通过传递不同参数,可以达到意外的效果,请看第二个问题。

    2、js中对数组的clone

     

    clone即克隆,就是复制一个数组:

    var ary = [1,2,3];
    var ary1 = ary.concat(); // 第一种方法
    var ary2 = ary.slice(0);  // 第二种方法
    var ary3 = ary; // 这个不是复制,这个是引用
    

    这两种方法复制的数组是一个新数组,原数组的值改变了,新数组不会受到影响。

     

    3、 查找一个字符串中出现次数最多的字符,统计这个次数

     

    第一种方法:
    先说一下思路:先定义一个空对象,将字符串中的字符作为对象的属性,就可以统计出次数了。然后找出对象中各个属性的最大值。
     
    // 字符串可以用单引号,也可以用双引号
    var str = 'ajfewiqnnfsdajfdajfdkakfjkdsfjds';
    var obj = {};
    // 处理字符串字符,给对象做属性用
    for(var i=0;i<str.length;i++){
        // 中括号调用,数组是下标,对象是属性,obj.name 和 obj['name']
        if(obj[str.charAt(i)]){
            // 如果对象有这个属性了,就给这个属性值自增1
            obj[str.charAt(i)]++;
        }else{
            // 如果对象没有这个属性,就给这个属性值设为1
            obj[str.charAt(i)] = 1;
        }
    }
    // 找出对象属性中最多次数
    var times = 0;
    var value = '';
    // for in 是另一种for循环,可以用于遍历对象的属性和方法
    for(var i in obj){
        if(obj[i]>times){
            times = obj[i];
            value = i;
        }
    }
    // 最多次数保存在times中了,字符保存在value中了
    
    第二种方法:
    先说一下思路:使用正则表达式,匹配字符串,同时计数。
     
    var str = 'ajfewiqnnfsdajfdajfdkakfjkdsfjds';
    var obj = {};
    str.replace(/(.)\1*/g,function(_,__){
        if(obj[__]){
            obj[__] += _.length;
        }else{
            obj[__] = _.length;
        }
    });
    var times = 0;
    var value = '';
    for(var i in obj){
        if(obj[i]>times){
            times = obj[i];
            value = i;
        }
    }
    

    4、 编写一个方法,去掉一个数组的重复元素

     

    去掉重复记录和上面的字符重复次数统计思路类似,代码不重复了。

     
    5、找出数组中最大值可以使用哪些方法
     
    var ary = [1,25,16,32,43,26,13,28,19];
    // 1、 for循环遍历,比较low,就不写了
    // 2、 数组排序
    ary.sort()[ary.length-1];
    // 3、数组排序+截取
    ary.sort().splice(-1)[0];
    // 4、借用Math最大值方法
    Math.max.apply(null,ary);
    
    玩转JavaScript、Html、Css三大法宝
    bling(兴哥)
  • 相关阅读:
    POJ3311Hie with the Pie(floyd传递+DP,状态压缩)
    POJ1185炮兵阵地(DP状态压缩)
    POJ3254Corn Fields (状态压缩or插头DP)
    eBPF Tracing 入门教程与实例
    因为 Java 和 Php 在获取客户端 cookie 方式不同引发的 bug
    DRDS 数据恢复重磅发布,全方位保障您的数据安全
    前沿 | 全球最具影响力开源数据库峰会开幕在即 阿里云精彩议题先睹为快
    MaxCompute 预付费标准版VS套餐版
    DTCC 2019 | 深度解码阿里数据库实现 数据库内核——基于HLC的分布式事务实现深度剖析
    从 Apache ORC 到 Apache Calcite | 2019大数据技术公开课第一季《技术人生专访》
  • 原文地址:https://www.cnblogs.com/bling/p/5519820.html
Copyright © 2020-2023  润新知