面试题数组篇(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);
 

猜你喜欢

转载自guxing820.iteye.com/blog/2300005