前端面试中,数组是少不了的。因为数组使用度比较频繁,我在项目中就经常使用。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);