前端常用算法【持续更新】

本文详细讲解了JavaScript中字符串的split()、join()、reverse()等方法,以及冒泡排序算法的两种实现。涉及随机字符串生成、阶乘计算和数组处理技巧,适合深入理解JavaScript和算法的开发者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串变数组split()
'aadaf'.split(''). // ['a', 'a', 'd', 'a', 'f']

'aadaf|jkl'.split('|') // ['aadaf', 'jkl']

"a2b3c4d5e678f12g".split(/\d+/) // 把以匹配的数字为分隔符来切分字符串
// ['a', 'b', 'c', 'd', 'e', 'f', 'g']

'JavaScript'.split("", 4);  //按顺序从左到右,仅分切4个元素的数组
// ['J', 'a', 'v', 'a']


数组变字符串join()
['J', 'a', 'v', 'a'].join() // 'J,a,v,a'
['J', 'a', 'v', 'a'].join("") // 'Java'
['J', 'a', 'v', 'a'].join("|") // 'J|a|v|a'

反转数组顺序reverse
reverse()
[1,2,3,8,9,4,5,7].reverse()  // [7, 5, 4, 9, 8, 3, 2, 1]

截取字符串slice
slice(start, end) 
'123456789'.slice(0,4) // '1234'


获取指定下标数组splice
var arr = [1,2,4,6,8]
var newArr = arr.splice(0,4)
console.log(arr) //[8]
console.log(newArr) //[1, 2, 4, 6]

数组指定位置 删除 和 添加元素splice(2, 0, x)
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var newArr = fruits.splice(2, 1, "Lemon", "Kiwi");
console.log(fruits) //  ['Banana', 'Orange', 'Lemon', 'Kiwi', 'Mango']
console.log(newArr) //  ['Apple']


删除数组指定元素,改变原数组
[1,2,3,4,5].splice(2, 2) // [1,2,5]
1,2,3,4,5].splice(2) // [1,2]


返回位置 1 的字符
"Hello world!".charAt(1) // e

找某个元素是否存在,并返回该元素下标
[1,2,4,6,8].indexOf(2) // 1
'sfergg'.indexOf('e') // 2 ,找不到返回-1

题目:1: '123456789' 每4个字符插入一个空格

function format(str) {
    var s = 0, e = 4, arr=[]
    var leth = str.length
    var m = Math.round(leth/4)
    for (var i = 0; i<= m; i++) {
        arr.push(str.slice(s, e))
        s = e
        e = e + 4
    }
    var newStr = arr.join(' ')
    return newStr
}
format('123456789') // '1234 5678 9' 

// 获取 1-10直接的随机整数
Math.round(Math.random()*10)

1: 冒泡排序法

function bubbleSort3 (arr3) {
	var low = 0;
	var high = arr.length - 1;
	//设置变量的初始值
	var tmp, j;
	console.time('2.改进后冒泡排序耗时');
    
	while (low < high) {
		for (j = low; j <high; ++j) {
            //正向冒泡,找到最大者
            if (arr[j] >arr[j +1]) {
                tmp = arr[j];
                arr[j] = arr[j +1];
                arr[j +1] = tmp;
            }
            --high;
            //修改high值, 前移一位
        }
        
		for (j = high;j >low;--j) {
        	    //反向冒泡,找到最小者
                if (arr[j] < arr[j -1]) {
                    tmp=arr[j];
                    arr[j] =arr[j -1];
                    arr [j -1] = tmp;
                }
                ++low;
                //修改low值,后移一位
        }
	}
	console.timeEnd('2.改进后冒泡排序耗时');
    return arr3;
}

var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];

console.log(bubbleSort3(arr));
//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
function bubbleSort(arr) {
    for (let i = 0; i < arr.length; i++) {
        // 如:长度10,0--9; 1---8; 2---7
        for (let j = 0; j < arr.length - i - 1; j++) {
          if (arr[j] > arr[j + 1]) { // 第一轮下来。最大值已经放在末尾
             let temp = arr[j];      // 第二轮下来,第二大值也已就位,第二轮,不比较最后1位
             arr[j] = arr[j + 1];    // 第二轮下来,第三大值也已就位,第三轮,不比较最后2位
             arr[j + 1] = temp;
          }
        }
    }
    return arr;
}
var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];

console.log(bubbleSort3(arr));
// [2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]



var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
arr.sort(function(a, b){
  return b - a
})
console.log(arr) // [50, 48, 47, 46, 44, 38, 36, 27, 26, 19, 15, 5, 4, 3, 2]

arr.sort(function(a, b){
  return a - b
})
console.log(arr) // [2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

2: 生成指定长度的随机字符串

function randomString(n){
    var str = 'abcdefghijklmnopqrstuvwxyz0123456789';
    var tmp = '';
    for(var i=0;i<n;i++)
        // Math.random(): 0-1之间数, str.length: 字符串长度
        // Math.random() * str.length:生成不大于字符串长度的随机数
        tmp += str.charAt(Math.round(Math.random()*str.length));
    return tmp;
}

3: 阶乘

//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;
}
//2. 递归实现
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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值