最近面试,遇到了几道题,当时没有回答好。这里记录一下,方便以后参考查阅!
数组相关
1. 在不使用遍历方法的情况下,计算数组 [1,2,3,4,5,6,7] 所有元素的平均值、获取到数组中的最大值。
当时第一眼看到这个题目的时候,还以为是要考我某个数组的api
,思前想后并没有一点头绪。中间比较接近了已经,我想到了数组的join()
方法。。。后来查阅资料,发现了面试官想要的答案。使用eval()
方法以及Math
方法。。
var arr = [1,2,3,4,5,6,7];
// 求平均值先要求出数组所有元素之和,需要用到eval()方法
// eval()方法可以返回一个字符串表达式的计算结果
// 所以先要将数组转换成为表达式,这里需要用'+'把数组所有元素连接起来,这里就要用数组的join()方法
var sum = eval(arr.join('+'));
var average = sum/arr.length;
console.log('数组中所有元素的平均值为:' + average);
// 获取最大值
var maxNum = Math.max.apply(null, arr);
console.log('数组中的最大值为:' + maxNum)
看到上边这样的方法之后,在不使用遍历方法的情况下,还可以对数组进行其他的各种运算,这里就不一一写出了。
2. 如何将js中的arguments对象转换为数组?(或者是如何将类数组对象转换为数组对象?)
这一道题的答案在MDN文档的Array部分讲slice()方法时有专门的介绍,感兴趣的可以点击这里去看看
直接上代码:
function list () {
return Array.prototype.slice.call(arguments);
// 这里也可以写成 [].slice.call(arguments)
}
var arrayLike = list(1,2,3,4,5);
var newArr = Array.prototype.slice.call(arrayLike);
console.log(arrayLike instanceof Array); // false
console.log(arrayLike instanceof Object); // true
console.log(newArr); // [1,2,3,4,5]
console.log(newArr instanceof Array); // true
这里借用了数组原型上的slice
方法。需要注意的是,这个方法不兼容IE9以下的浏览器。MDN上的解释是这样的:
根据规范,使用 Array.prototype.slice 转换宿主对象(如 DOM 对象)时不必遵循 Mozilla 的默认行为,即可以转化任何符合条件的伪数组宿主对象为数组,IE < 9 没有遵循,而 IE9 + 遵循这个行为。
如果需要兼容低版本IE浏览器,也可以点击这里看看MDN页面下方介绍的方法。
字符串相关
1. 在不使用遍历方法的情况下,计算以下字符串中字符串”_”出现的次数。
随便写一个字符串,例如:”skll! d_hos &+_*(“ sjo-_9w7”
当时第一眼看到这个题目的时候,一时间没想到方法,其实这题真的超级简单啊。。面试完了再一想的时候,一下子就明白了,恨自己当时的弱智表现啊!!
其实这一道题只需要用到字符串的split()
方法就可以得到答案了。
上代码:
var str = "_skll! d_hos &__*(" sjo-_9w7"; |
由于数组是以字符_
为分界拆开的,所以字符_
出现的次数就是数组长度减去1。真的很简单啊啊啊。
就先写到这里吧,后边有的话还会再更新的。