KonishiLee's Blog

JS 常见算法

背景

在 JS 的学习中,我们会经常用到数组的一些算法,虽然现在的轮子越来越多,但是对于想要学好前端来说一定要对一些算法很了解,这对以后的开发工作会很有帮助,因为在日常的编码当中可能会遇到利用算法的时候,同时也可以提高你的逻辑能力。

首先定义一下需要使用到的变量

1
2
var arr = [1,232,334,45,56,75,45,5,6,5,5,7,55,4,2,1,2,4,23,4,32,1,24,6,5,6],
str = 'adsfasdfeweoijsdalkfmdsklnmdnxmzlkafnsnfbfaksdnnzknaslkdfnqweupoirusklznxzn';

去除数组中重复的字符

思路:利用一个对象来判断是否存在,如果不存在才添加进入新的数组进行返回。

1
2
3
4
5
6
7
8
9
10
11
12
13
function unique(arr){
var hasChar = {},
data = [];
for(var i = 0; i < arr.length; i++){
if(!hasChar[arr[i]]){
data.push(arr[i]);
hasChar[arr[i]] = true;
}
}
return data;
}

获取字符串当中最多的字母

思路:利用一个对象将当前的字符和字符出现的次数记录起来,然后通过遍历对象来将最大的字符找出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function getMaxCharInArr(str){
var hasChar = {},
for(var i = 0; i < str.length; i++){
if(hasChar[str[i]]){
hasChar[str[i]] += 1;
}else{
hasChar[str[i]] = 1;
}
}
var maxChar = '',
maxNum = 0;
for(var o in hasChar){
if(hasChar[o] > maxNum){
maxNum = hasChar[o];
maxChar = o;
}
}
return {
maxChar: maxChar,
maxNum: maxNum
}
}

冒泡排序

思路:非常经典且基础的排序方法,比对数组前后两位数的大小进行排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
function bubble(arr){
for(var i = 0; i < arr.length; i++){
for(var j = i + 1; j < arr.length; j++){
if(arr[i] > arr[j]){
var temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
return arr;
}

快速排序

思路:通过找出一个数,然后将数组进行分组,大于此数字的就添加到 leftArr,不然添加到 rightArr,通过循环来一次比对,直至数组被遍历到只有一位。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function quickSort(arr){
var q = arr[0],
leftArr = [],
rightArr = [];
for(var i = 0; i < arr.length; i++){
if(q > arr[i]){
leftArr.push(arr[i]);
}else{
rightArr.push(arr[i]);
}
}
return [].concat(quickSort(leftArr), [q], quickSort(rightArr));
}

不借助变量,进行两个整数的交换

思路:最后需要将 a = b,所以有一个公式:a = a + (b - a)

1
2
3
4
5
6
7
8
9
10
11
12
// a = 5, b = 3
function swap(a, b){
b = b - a;
a = a + b;
b = a - b;
return {
a: a,
b: b
}
}

黄金切割线的数组 0、1、1、2、3、5、8、13、21、34…,查找 n 个的值是多少

思路:fibon[i] = fibon[i - 1] + fibon[i - 2]

1
2
3
4
5
6
7
8
9
10
11
12
13
function getFibonacci(n){
var fibon =[];
while(i < n){
if(i <= 1){
fibon.push(i);
}else{
fibon.push(fibon[i - 1] + fibon[i - 2]);
}
i++;
}
return fibon;
}
如果喜欢这个分享,就帮忙买杯咖啡吧