面试题数组篇(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);
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值