46道JS能力测评经典题解法总结(借鉴网上解题资料整理)

1.数组求和

题目描述:计算给定数组arr中所有元素的总和

示例:
输入:[1,2,3,4]
输出:10

解题方法

1.普通for循环

function sum(arr){
   
    let res = 0
    for(let i=0;i<arr.length;i++){
   
        res += arr[i]
    }
    return res
};
2.forEach循环

function sum(arr){
   
    let res = 0
    arr.forEach((value,index,array)=>{
   
        array[index] == value;
        res += value;
    });
    return res;
};
3.reduce()
方法接受一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

function sum(arr){
   
    return arr.reduce((pre,cur)=>{
   
        return pre+cur;
    })
};
4.eval
eval()函数可计算某个字符串,并执行其中的JavaScript代码

function sum(arr){
   
    return eval(arr.join("+"));
}
2.移除数组中的元素(返回新的数组)

题目描述:移除数组arr中的所有值与item相等的元素。不要直接修改数组arr,结果返回新的数组

示例:
输入:[1,2,3,4,2],2
输出:[1,3,4]
1.filter过滤

function remove(arr,item){
   
    return arr.filter(res =>{
   
    return res != item;
    })
}
2.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
}
3.forEach + pash(效率高于for循环)

function remove(arr,item){
   
    let resArr=[];
    arr.forEach(v=>{
   
    if(v!==item){
   
        resArr.push(v);
    }
    })
    return resArr;
}
4.for循环+splice

function remove(arr,item){
   
    let resArr = arr.slice(0);
    for(let i=0; i < resArr.length;i++){
   
        if(resArr[i] == item){
   
            resArr.aplice(i,1);
            i--;
        }
    }
    return resArr;
}
3.删除数组最后一个元素

题目描述:删除数组arr最后一个元素。不要直接修改数组arr,结果返回新的数组

示例:
输入:[1,2,3,4]
输出:[1,2,3]
方法一:slice

function truncate(arr){
   
    return arr.slice(0,arr.length-1)
}
方法二:concat/slice+pop

function truncate(arr){
   
    let resArr = arr.concat()
    resArr.pop()
    return resArr
}
4.判断是否以元音字母结尾

题目描述:给定字符串str,检查其是否以元音字母结尾,元音字母包括a,e,i,o,u以及对应的大写,包含返回true,否则返回false

示例:
输入:'gorilla'
输出:true
首先确定元音集合[a,e,i,o,u],然后是以元音结尾,加上$,最后通配大小写,加上i

方法一:
function endsWithVowel(str){
   
    return /[a,e,i,o,u]$/i.test(str);
}
方法二:
function endsWithVowel(str){
   
    return /(a|e|i|o|u)$/gi.test(str);
}
方法三:
function endsWithVowel(str){
   
   return str && ("aeiouAEIOU".indexOf(str[str.length-1]) > -1);
}
5.判断是否包含数字

题目描述:给定字符串str,检查其是否包含数字,包含返回true,否则返回false

示例:
输入:'abc123'
输出:true
方法一:正则test
function containsNumber(str){
   
    return /\d/.test(str);
}
方法二:正则match
function containsNumber(str){
   
    return !!str.match(/\d/g)
}
方法三:遍历
function containsNumber(str){
   
    for(let i=0;i < 10;i++){
   
        if(str.indexOf(i)!=-1){
   
            return true;
        }
    }
    return false;
}
方法四:for循环+Number()
function containsNumber(str){
   
    let res = str.split('')
    for(let i = 0;i < res.length;i++){
   
        let temp = Number(res[i]);
        if(temp){
   
            return true
        }
    }
    return false
}
6.查找数组元素位置

题目描述:找出元素item在给定数组arr中的位置
输出描述:如果数组中存在item,则返回元素在数组中的位置,否则返回-1

示例:
输入:[1,2,3,4],3
输出:2
方法一:
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
    }
}
方法二:
function indexOf(arr,item){
   
    if(Array.prototype.indexOf){
   
        return arr.indexOf(item);
    }else{
   
        for(var i=0;i < arr.length;i++){
   
            if(arr[i]===item){
   
                return i;
            }
        }
    }
    return -1
}
7.移除数组中的元素(返回原数组)

题目描述:移除数组arr中所有值与item相等的描述,直接在给定的arr数组上进行操作,并将结果返回

示例:
输入:[1,2,2,3,4,2,2],2
输出:[1,3,4]
方法一:
function removeWithoutCopy(arr, item) {
   
for(let i=arr.length;i>=0;i--){
   
    if(arr[i]==item){
   
        arr.splice(i,1);
    }
}
    return arr;
}
方法二:
function removeWithoutCopy(arr, item) {
   
for(let i=0;i<=arr.length;i++){
   
    if(arr[i]===item){
   
        arr.splice(i,1);
        i
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值