码迷,mamicode.com
首页 > 编程语言 > 详细

js常用算法

时间:2019-04-07 19:15:20      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:eve   code   重复   src   中间   dex   ++   没有   set   

1.判断一个字符串是“回文”类型,回文:形如‘abcba’、‘mamam’这种第一个与最后一个字符相同,第二个和倒数第二个字符相同。。。一次类推,该怎么实现呢?

对与我来说,首先看到第一眼,还真没想起来怎么处理,后来想到用reverse()就可以啊!MD!那是数组的方法!!!总之要用reverse()方法,那就先转成数组,再转成字符串来比较就行了啊

function checkReverseString(str) {  
    return str == str.split(‘‘).reverse().join(‘‘);
}

2.数组去重:
先来看用老方法处理:

1).object对象中是否存在当前key

var arr = [1,2,3,1,2,3]
function uniqueArr(arr) {
    var obj = {}
    var result = []
    for (var i = 0, len = arr.length; i < len; i++) {
        if (!obj[arr[i]]) {
            obj[arr[i]] = true
            result.push(arr[i])
        }
    }
    return result
}

2) Array.indexOf()

var arr = [1,2,3,1,2,3]
function uniqueArr(arr) {
    var obj = arr
    var result = []
    for (var i = 0, len = arr.length; i < len; i++) {
        if (result.indexOf(arr[i]) === -1) {
            result.push(arr[i])
        }
    }
    return result
}

3) ES6 Array.from(new Set()),set中不存在重复的项:

var arr = [1,2,3,1,2,3]
var arr1 = Array.from(new Set(arr))
console.log(arr1)

还是这种方法好啊,清清爽爽!

3.统计一个字符串中出现次数最多的字符和出现的次数

刚开始没有太多的思路,刚才数组去重,用到了obj key的属性,那这里是不是也可以用呢?遇到新的字符,obj的该字符的值设为1,再遇到就+1,来试试:

var str = ‘aaaabbbc‘
function maxSym(str) {
    if (str && str.length === 1) {
        return str
    }
    var obj = {}
    for (var i = 0, len = str.length; i < len; i++) {
        obj[str[i]] = obj[str[i]] ? obj[str[i]] + 1 : 1
              // 这里只能写obj[str[i]] + 1,其他写法,例如++,执行会有问题,如果你知道为什么请告诉我
    }
    var maxStr = ‘‘
    var maxCount = 0
    for (var key in obj) {
        if (obj[key] > maxCount) {
            maxStr = key
            maxCount = obj[key]
        }
    }
    return maxStr + ‘:‘ + maxCount
}
console.log(maxSym(str))

4.不愿意看到的排序,还是要来的

1).先看看冒泡排序,必须要掌握

var arr = [2,34,4,1]
function bubbleSort(arr) {
    if (arr && arr.length === 1) {
        return arr
    }
    for (var i = 0, len = arr.length; i < len - 1; i ++) { // 控制循环的轮数,为什么要len - 1?要比较有两个元素的数组[2,1],请问比较几轮?1轮!以此类推:len-1
        for (var j = 0; j < len - i - 1; j ++) { // 控制每轮要比较的次数
            if (arr[j] > arr[j+1]) {
                var temp = arr[j]
                arr[j] = arr[j+1]
                arr[j+1] = temp
            }
        }
        console.log(arr)
    }
    return arr
}
console.log(bubbleSort(arr))

技术图片

2).快速排序,先找到一个中间值,然后遍历,把比中间值小的放在左边数组,把比中间值大的放在右边数组,然后再分别按这种思路对两个新数组比较,以此类推,直到结束。

 

 

 

 统计一个字符串出现最多的字母

js常用算法

标签:eve   code   重复   src   中间   dex   ++   没有   set   

原文地址:https://www.cnblogs.com/whq920729/p/10666522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!