面试题数组篇(1)

来源:互联网 发布:mysql 热备 编辑:程序博客网 时间:2024/06/05 06:22
前端面试中,数组是少不了的。因为数组使用度比较频繁,我在项目中就经常使用。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、 查找一个字符串中出现次数最多的字符,统计这个次数
 

第一种方法:
先说一下思路:先定义一个空对象,将字符串中的字符作为对象的属性,就可以统计出次数了。然后找出对象中各个属性的最大值。

<span style="font-size:14px;">// 字符串可以用单引号,也可以用双引号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中了</span>


第二种方法:
先说一下思路:使用正则表达式,匹配字符串,同时计数。

<span style="font-size:14px;">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;    }}</span>

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


 
0 0
原创粉丝点击