网站首页 > 技术文章 正文
45道JS能力测评经典题总结
前言
牛客网的45道JS能力评测题个人觉得是非常好的45道js基础检测题,基本就是对自己的JavaScript基础做一个比较全面的评估,包括if语句、循环体、基础操作符、setInterval、setTimeout、流程控制、常用数组方法及es6相关(解构、Map、Set、...等)。之前我已经做过一遍了,我记得以前牛客网不支持es6的写法,这两天花了点时间把所有题目又做了一遍,发现支持es6了。这次每个题目我都尽力用了不同的方法实现,建议各位看官收藏,需要的时候方便查看。当然如果你有更好更新颖的实现方法,欢迎评论区留言交流。
我也把常用的数组方法和字符串方法贴在这里,可以自测掌握程度
1、查找数组元素位置
第一题比较简单,就直接上答案:
// 方法一
function indexOf(arr, item) {
if(Array.prototype.indexOf){// 判断浏览器是否支持indexOf方法
return arr.indexOf(item);
}else{
for(var i=0;i<arr.length;i++){
if(arr[i]===item){
return i;
}
}
}
return -1;
}
// 方法二
function indexOf(arr, item) {
if(Array.prototype.indexOf){// 判断浏览器是否支持indexOf方法
return arr.indexOf(item);
} else if (arr.indexOf(item) > 0) {
return arr.indexOf(item)
}else{
return -1
}
}
复制代码
这里顺便说一下Array.prototype.indexOf
indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
语法:
arr.indexOf(searchElement) //查找searchElement元素在数组中的第一个位置
arr.indexOf(searchElement[, fromIndex = 0]) //从fromIndex开始查找searchElement元素在数组中的第一个位置
复制代码
还有另外一个查找字符串的方法String.prototype.indexOf()
str.indexOf(searchValue[, fromIndex])
复制代码
- searchValue:一个字符串表示被查找的值。
- fromIndex (可选):表示调用该方法的字符串中开始查找的位置。可以是任意整数。默认值为 0。如果 fromIndex < 0 则查找整个字符串(如同传进了 0)。如果 fromIndex >= str.length,则该方法返回 -1,除非被查找的字符串是一个空字符串,此时返回 str.length。
具体可以看看MDN
2、添加元素(末尾添加)
方法一:普通的for循环拷贝+push
function append(arr, item) {
let resArr = []
for(let i = 0;i<arr.length;i++){
resArr.push(arr[i])
}
resArr.push(item)
return resArr
}
复制代码
方法二:使用concat将传入的数组或非数组值与原数组合并,组成一个新的数组并返回
function append(arr, item) {
return arr.concat(item);
}
复制代码
方法三:使用slice浅拷贝+push
function append(arr, item) {
let newArr = arr.slice(0); // slice(start, end)浅拷贝数组
newArr.push(item);
return newArr;
}
复制代码
方法四:...扩展运算符 如果不知道的,可以看看es6的相关知识
function append(arr, item) {
let resArr = [...arr,item]
return resArr
}
复制代码
3、移除数组中的元素(返回原数组)
这里需要注意理解题目,是直接操作原数组,所以不能出现newArr
方法一:普通for循环+splice
function removeWithoutCopy(arr, item) {
for(let i=arr.length;i>=0;i--){
if(arr[i]==item){
arr.splice(i,1);
}
}
return arr;
}
复制代码
方法二:方法一的另外一种写法
在这里要注意在删除掉一个元素时,要 i–,即删除这个元素后,其他元素位置往前移。
function removeWithoutCopy(arr, item) {
for(let i = 0; i< arr.length; i++) {
if(arr[i]===item) {
arr.splice(i,1);
i--;
}
}
return arr;
}
复制代码
把第3题稍微变一下,看下一题
4、移除数组中的元素(返回新的数组)
方法一:filter过滤
function remove(arr, item) {
return arr.filter(res =>{
return res != item;
})
}
复制代码
方法二:for循环+push
function remove(arr, item) {
let resArr = []
for(let i = 0;i<arr.length;i++){
if(arr[i]!== item){
resArr.push(arr[i])
}
}
return resArr
}
复制代码
方法三:forEach+push(效率高于for循环)
function remove(arr, item) {
let resArr=[];
arr.forEach(v=>{
if(v!==item){
resArr.push(v);
}
})
return resArr;
}
复制代码
方法四:for循环+splice
function remove(arr,item){
let resArr= arr.slice(0);
for(let i=0;i<resArr.length;i++){
if(resArr[i] == item){
resArr.splice(i,1);
i--;
}
}
return resArr;
}
复制代码
5、数组求和
方法一:普通for循环
function sum(arr) {
let res = 0
for(let i=0;i<=arr.length;i++){
res +=arr[i]
}
return res
}
复制代码
方法二:forEach循环
function sum(arr) {
let res = 0
arr.forEach((value,index,array)=>{
array[index] == value; //结果为true
res+=value;
});
return res;
};
复制代码
方法三:reduce
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值,具体可以看看es6相关知识。
function sum(arr) {
return arr.reduce((pre,cur)=>{
return pre+cur;
})
}
复制代码
方法四:eval
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
function sum(arr) {
return eval(arr.join("+"));
}
复制代码
关注后私信回复前端“” 可以观看全部题目,还可以下载前端教程学习!
猜你喜欢
- 2024-11-14 Vue3.0 响应式数据原理:ES6 Proxy
- 2024-11-14 腾讯面试四问,Are you OK? 腾讯hr面试问题
- 2024-11-14 ES6 四大新功能速成攻略 es6基础入门
- 2024-11-14 高频JavaScript手写面试题及答案 前端面试笔试题手写代码
- 2024-11-14 四大问题之腾讯面试 腾讯公司面试问题
- 2024-11-14 通俗易懂的Vue响应式原理以及依赖收集
- 2024-11-14 看了vue的源码,我用proxy实现了更强大的storage
- 2024-11-14 JavaScript知识整理 js知识点总结
- 2024-11-14 JavaScript基础之对象与内置对象总结
- 2024-11-14 原生JS灵魂之问(中),看看你是否熟悉JavaScript?
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-