前端简单算法题汇总

冒泡排序

function bubble(arr) {
    for(var i=0;i<arr.length;i++){
        for(j=0;j<arr.length-i-1;j++){
            if(arr[j]> arr[j+1]){
                var temp = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    console.log(arr);
    return arr;
}
bubble([9,4,2,3,8,0])

快速排序

// 在数组中指定一个元素为标尺,比它大的放在该元素后面,比它小的放在该元素前面,
// 返回的左边和右边组成的数据再次递归调用,重复至全部正序排列
function quickSort(arr) {
    if(arr.length<=1) return arr;
    var left=[],
        right=[];
    var temp = Math.floor(arr.length/2);
    var tempItem = arr.splice(temp,1)[0];
   // console.log(tempItem)
    //console.log('arr:'+arr)
    for(var i=0;i<arr.length;i++){
        if(arr[i]>tempItem){
            right.push(arr[i])
            //console.log('right:'+right)
        }else{
            left.push(arr[i])
            //console.log('left:'+left)
        }
    }
     return quickSort(left).concat([tempItem],quickSort(right));
}
console.log('result:'+quickSort([9,1,3,7,2,4,5]))
quickSort([9,1,3,7,2,4,5])

九九乘法表

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box{
            text-align: center;
        }
        .item{
            display: inline-block;
            border: 1px solid #eee;
            padding: 5px 10px;
            width: 51px;
            height: 17px;
            margin-bottom: -1px;
            margin-right: -1px;
        }
    </style>
</head>
<body>
<script>
    document.write('<div class="box">')
    for(var i=1;i<=9;i++){
        document.write('<div>')
        for(var j=1;j<=i;j++){
            document.write('<span class="item">'+i+'x'+j+'='+i*j+'</span>')
        }
        document.write('</div>')
    }
    document.write('</div>')
</script>
</body>
</html>

二进制数相加

function addBinary(str1,str2) {
    // 反转字符串并分割为数组,再逐个相加
    var arr1 = str1.split('').reverse();
    var arr2 = str2.split('').reverse();
    var [alength,blength,carry,result]=[arr1.length,arr2.length,0,[]];
    var lenMax = Math.max(alength,blength)
    // 取最大的长度进行遍历,以保证都相加到
    for(var i=0;i<lenMax;i++){
        // 每一项值为对应数组相加,再加上进位值
        // 括号前面加加号,表示类型转换,转换不了就置为0
        var itemSum = +(arr1[i] || 0)+ +(arr2[i] || 0) +carry;
        console.log(itemSum)
        if(itemSum === 0) {
            result[i]=0;
            carry = 0
        }else if(itemSum === 1) {
            result[i] = 1;
            carry = 0;
        }else if(itemSum === 2) {
            result[i]=0;
            carry=1;
        }else{
            result[i]=1;
            carry=1;
        }
    }
    // 若高位发生进位则插入1
    if(carry === 1) result.push(1);
    console.log(result.reverse().join(''))
    return result.reverse().join('')
    ;
}
addBinary('11','01')

删除数组中所有假值

// 删除数组中所有的假值,在JavaScript中,假值有false,null,0,“”,undefined,和NaN
// 可以通过过滤函数,过滤这些假值,条件为正,则返回
function deletDate(arr){
    return arr.filter(test)
}
function test(item){
    var count = item !==false || item !==null || item !==0 || item !=="" || item !== undefined || item !== NaN ;
    if(count){
        return item;
    }
}
console.log(deletDate([12,undefined,null,0,true,false,NaN,90,"","number"]))

判断是否为回文数

function isHuiwenshu(str) {
    var str1 = str.split("").reverse().join("")
   // console.log(str1)
    if(str === str1){
        return true;
    }else{
        return false;
    }
}
console.log(isHuiwenshu('abc123321cba'))
isHuiwenshu('abc123321cba')

让所有首字母大写

// 确保单词的所有首字母大写,剩下的小写
function strFirstUpper(str){
    var arr = str.split(" ");
    for(var i=0;i<arr.length;i++){
        arr[i] = arr[i].substring(0,1).toUpperCase()+arr[i].substring(1).toLowerCase()
    }
    arr = arr.join(' ')
    console.log(arr)
    return arr;
}
strFirstUpper('hello world ! lala ye hao de')

去重后升序排列

// 去掉数据中重复项,再按升序排列
function unique(arr) {
   /* var result=[]
    for(var i=0;i<arr.length;i++){
        if(result.indexOf(arr[i]) === -1){
            result.push(arr[i])
        }
    }*/
   var result = [...new Set(arr)]
    result.sort(function(a,b){return a-b})
    console.log(result);
    return result;
}
unique([1,6,9,9,0,10,2,2,3,4,4,5])

将数组截成指定size的子数组

function madeNewArr(arr,size) {
    var result = []
    while(arr.length>size){
        arr1 = arr.slice(0,size);
        // console.log(arr1)
        arr =arr.slice(size);
       result.push(arr1) ;
        // console.log(result);
       if(arr.length<size){
           result.push(arr);
       }
    }
    console.log(result);
    return result;
}
madeNewArr([1,2,3,4,4,5,6,7,7,8,8],4)

找到句子中最长的单词并计算长度

function findLength(str){
    var arr = str.split(" ");
    console.log(arr);
    var result = arr.sort(function(a,b){return b-a});

    var r ='最长的单词为:'+result[0]+'长度为:'+result[0].length;
    console.log(r);
    return r;
}
findLength('hello world !')

找到子数组中最大值,组成新数组

// 一个大数组中包含4个小数组,分别找到每个小数组中的最大值,,然后把它们串联起来组成新的数组
function madeNewArr(arr){
    var result=[]
    for(var i=0;i<arr.length;i++){
       result.push(Math.max.apply(null,arr[i]))
    }
    console.log(result)
    return result
}
madeNewArr([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])

第一个字符串中是否包含第二个字符串中所有字符

// 一个数组中,第一个字符串中包含第二个字符串中所有的
function isInclude(arr) {
    var str1 = arr[0].toLowerCase();
    var str2 = arr[1].toLowerCase()
    for(var i=0;i<str2.length;i++){
        if(str1.indexOf(str2[i]) === -1){
            // 如果str2中存在str1中没有的字符串则会返回false
            return false;
        }
    }
    return true
}
console.log(isInclude(['hello','hehe']))
isInclude(['hello','hehe'])

数组按低-高-低排列

//给一个数组arr,进行排序,按照从低到高在从高到低进行排列
// 分析,如果这个数组能被2整除,则直接分为两部分,第一部分按照从小到大排序,第二部分按照从大到小排序
// 如果这个数组不能被2整数,为奇数,则先找出那个最大值,取出后,再按照上面的进行排序
function sortlowtoheighttolow(arr) {
    var newarr=[]
    if((arr.length)%2===0) {
        var arr1 = arr.slice(0,arr.length/2).sort(function(a,b) {return a-b});
        var arr2 = arr.slice(arr.length/2).sort(function(a,b) {return b-a});
        console.log(newarr.concat(arr1,arr2))
        return newarr.concat(arr1,arr2)
    }else {
        var max = Math.max.apply(null,arr)
        var index = arr.indexOf(max);
        arr.splice(index,1);
        var arr1 = arr.slice(0,arr.length/2).sort(function(a,b){return a-b});
        var arr2 = arr.slice(arr.length/2).sort(function(a,b){return b-a});
        console.log(newarr.concat(arr1,max,arr2))
        return newarr.concat(arr1,max,arr2);
    }
}
sortlowtoheighttolow([1,4,5,6,3,9,12])

统计字符串中出现最多的字母

// 先设置一个对象分别记录字符串中字母出现的次数,在遍历字符串中每个字母时,找到对应的最大值,并使用一个变量保存
function maxstr(str) {
    var temp={};
    var max=1;
    for(var i=0;i<str.length;i++){
        if(!temp[str[i]]){
            temp[str[i]] =1;
        }else{
            temp[str[i]] =temp[str[i]]+1;
        }
        if(temp[str[i]]>max){
            max=temp[str[i]]
            maxstrs = str[i]
        }
    }
    console.log(maxstrs ,' :'+ max)
    return maxstrs;
}

逗号隔开n个字符串

// 给定一个字符串,每个n个就隔开组成一个数组
function  strTonewArr(str,n) {
    var result = [];
    while(str.length>n){
        var str1 = str.substring(0,n)
        str = str.substring(n);
        result.push(str1)
        if(str.length<=n){
            result.push(str)
        }
    }
    console.log(result)
    return result;
}
strTonewArr('hello1234567890eeeeeeeqw1',4)

后续有时间再继续整理。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值