前端JS常见算法整理

web前端开发技术答案|前端开发 手机端|前端开发经验总结

排序算法
1、冒泡排序
html 代码

var arr = [1, 5, 8, 9, 7, 4, 1]
function bubbleSort(arr) {
    var i = 0,
        j = 0
    for (i = 1; i < arr.length; i++) {
        for (j = 0; j <= arr.length – i; j++) {
            var temp = 0
            // “>” 从小到大排序
            // “<” 从大到小排序
            if (arr[j] > arr[j + 1]) {
                temp = arr[j]
                arr[j] = arr[j + 1]
                arr[j + 1] = temp
            }
        }
    }
    return arr
}
console.log(bubbleSort(arr))

2、快速排序

html 代码

var arr = [1, 5, 8, 9, 7, 4, 1]
function quickSort(arr, l, r) {
    //l和r分别表示需要排序数组的起始下标和结束下标
    if (l < r) {
        var i = l,
            j = r,
            x = arr[i]
        while (i < j) {
            while (i < j && arr[j] > x) j–
            if (i < j)
                //这里用i++,被换过来的必然比x小,赋值后直接让i自加,不用再比较,可以提高效率
                arr[i++] = arr[j]
            while (i < j && arr[i] < x) i++
            if (i < j)
                //这里用j–,被换过来的必然比x大,赋值后直接让j自减,不用再比较,可以提高效率
                arr[j–] = arr[i]
        }
        arr[i] = x
        quickSort(arr, l, i – 1)
        quickSort(arr, i + 1, r)
    }
    return arr
}
console.log(quickSort(arr, 0, 6))

字符串操作

1、判断回文字符串
html 代码

//所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的–
var str = ‘77582528577’
function palindrome(str) {
    // \W匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
    var re = /[\W_]/g
    // 将字符串变成小写字符,并干掉除字母数字外的字符
    var lowRegStr = str.toLowerCase().replace(re, ”)
    // 如果字符串lowRegStr的length长度为0时,字符串即是palindrome
    if (lowRegStr.length === 0) return true
    // 如果字符串的第一个和最后一个字符不相同,那么字符串就不是palindrome
    if (lowRegStr[0] != lowRegStr[lowRegStr.length – 1]) return false
    //递归
    return palindrome(lowRegStr.slice(1, lowRegStr.length – 1))
}
console.log(palindrome(str))

2、翻转字符串

思路一:反向遍历字符串
html 代码

var str2 = ‘7758258’
function reverseString(str) {
    var tmp = ”
    for (var i = str.length – 1; i >= 0; i–) tmp += str[i]
    return tmp
}
console.log(reverseString(str2))

思路二:转化成array操作
html 代码

var str2 = ‘7758258’
function reverseString(str) {
    var arr = str.split(”)
    var i = 0,
        j = arr.length – 1
    while (i < j) {
        tmp = arr[i]
        arr[i] = arr[j]
        arr[j] = tmp
        i++
        j–
    }
    return arr.join(”)
}
console.log(reverseString(str2))

3、生成指定长度随机字符串
html 代码

function randomString(n) {
    var str = ‘abcdefghijklmnopqrstuvwxyz0123456789’
    var tmp = ”
    for (var i = 0; i < n; i++) {
        tmp += str.charAt(Math.round(Math.random() * str.length))
    }
    return tmp
}
console.log(randomString(5))

4、统计字符串中次数最多字母
如果出现次数一样的字母只显示排在后面的
html 代码

var str2 = ‘7758258’
function findMaxDuplicateChar(str) {
    if (str.length == 1) {
        return str
    }
    var charObj = {}
    for (var i = 0; i < str.length; i++) {
        if (!charObj[str.charAt(i)]) {
            charObj[str.charAt(i)] = 1
        } else {
            charObj[str.charAt(i)] += 1
        }
    }
    var maxChar = ”,
        maxValue = 1
    for (var k in charObj) {
        if (charObj[k] >= maxValue) {
            maxChar = k
            maxValue = charObj[k]
        }
    }
    return maxChar + ‘:’ + maxValue
}
console.log(findMaxDuplicateChar(str2))

数组操作

1、数组去重
html 代码

function unique(arr) {
    var obj = {}
    var result = []
    for (var i in arr) {
        if (!obj[arr[i]]) {
            obj[arr[i]] = true
            result.push(arr[i])
        }
    }
    return result
}

2、数组中最大差值
html 代码

var arr = [1, 5, 8, 9, 7, 4, 0, 1]
function getMaxProfit(arr) {
    var min = arr[0],
        max = arr[0]
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] < min) min = arr[i]
        if (arr[i] > max) max = arr[i]
    }
    return max – min
}
console.log(getMaxProfit(arr))

其他常见算法

1、阶乘

非递归实现
html 代码

//示例:5*4*3*2*1
function factorialize(num) {
    var result = 1
    if (num < 0) return -1
    if (num == 0 || num == 1) return 1
    while (num > 1) {
        result *= num–
    }
    return result
}
console.log(factorialize(5))

递归实现
html 代码

function factorialize(num) {
    var result = 1
    if (num < 0) return -1
    if (num == 0 || num == 1) return 1
    if (num > 1) return num * factorialize(num – 1)
}

w前端开发的笔记本知乎|知乎前端开发精华|前端开发和后端开发知乎

» 本文来自:前端开发者 » 《前端JS常见算法整理》
» 本文链接地址:https://www.rokub.com/5141.html
» 您也可以订阅本站:https://www.rokub.com
赞(1)
64K

评论 抢沙发

评论前必须登录!