前端中经常出现的JS算法总结

转载自:前端李李

1.排序算法
2.阶乘算法
3.回文字符串判断
4.翻转字符串算法
5.整型数组去重算法
6.数组中最大差值
7.随机指定长度字符串
8.统计字符串中次数最多字母
9.生成菲波那切数列数组

1.排序算法

冒泡排序

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

快速排序

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
26
27
function quickSort(arr,l,r){
var i,j,x;
if(l< r){
i=l;
j=r;
x=arr[i];
while(i< j){
while(i< j&&arr[j]>=x){
j--;
}
if(i< j){
arr[i]=arr[j];
}
while(i< j&&arr[i]< x){
i++;
}
if(i< j){
arr[j]=arr[i];
}
}
arr[i]=x;
//递归调用
quickSort(arr,i+1,r);
quickSort(arr,l,i-1);
}
return arr;
}

2. 阶乘算法

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

3. 回文字符串判断

1
2
3
4
5
6
7
8
9
10
11
12
function palindrome(str){
var re = /[W_]/g;
var lowRegStr = str.toLowerCase().replace(re, '');
if (lowRegStr.length === 0) {
return true;
}
if (lowRegStr[0] !== lowRegStr[lowRegStr.length - 1]) {
return false;
} else {
return palindrome(lowRegStr.slice(1, lowRegStr.length - 1));
}
}

4. 翻转字符串算法

1
2
3
4
5
6
7
8
9
10
11
12
function reverseString(s) {
var arr = s.split('');
var i = 0, j = arr.length - 1;
while (i < j) {
var t = arr[i];
arr[i] = arr[j];
arr[j] = t;
i++;
j--;
}
return arr.join('');
}

5. 整型数组去重算法

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

6. 数组中最大差值

1
2
3
4
5
6
7
8
9
10
11
function getMaxProfit(arr) {
var minPrice = arr[0];
var maxProfit = 0;
for (var i = 0; i < arr.length; i++) {
var currentPrice = arr[i];
minPrice = Math.min(minPrice, currentPrice);
var potentialProfit = currentPrice - minPrice;
maxProfit = Math.max(maxProfit, potentialProfit);
}
return maxProfit;
}

7. 随机指定长度字符串

1
2
3
4
5
6
7
8
9
function randomString(n) {
var str = 'abcdefghijklmnopqrstuvwxyz9876543210';
var tmp = '';
var l = str.length;
for(var i = 0; i < n; i++) {
tmp += str.charAt(Math.floor(Math.random() * l));
}
return tmp;
}

8. 统计字符串中次数最多字母

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
}

9. 生成菲波那切数列数组

1
2
3
4
5
6
7
8
9
10
11
12
13
function getFibonacci(n) {
var fibarr = [];
var i = 0;
while(i < n) {
if(i <= 1) {
fibarr.push(i);
} else {
fibarr.push(fibarr[i - 1] + fibarr[i - 2])
}
i++;
}
return fibarr;
}
© 2017 RABBIT All Rights Reserved.
Theme by hiero