- 一、排序算法和递归
- 二、字符串的常用方法
- 三、字符串的思考题
- 1、”2019-8-18 12:32:18”; ==>”2019年08月18日 12时32分18秒”
- https://www.baidu.com?name=zhufeng&age=10&id=14“; ==> { name: ‘zhufeng’, age: ‘10’, id: ‘14’ }">2、str =”https://www.baidu.com?name=zhufeng&age=10&id=14“; ==> { name: ‘zhufeng’, age: ‘10’, id: ‘14’ }
一、排序算法和递归
1、算法之冒泡排序
冒泡排序原理
ary = [8, 2, 1, 5]
需求:升序
第一轮:[2, 1, 5, 8] 经过第一轮比较,得到了第一个最大数8
第二轮:[2, 1, 5, 8] 经过第二轮比较,得到了第二个最大数5
第三轮:[1, 2, 5, 8] 经过第三轮比较,得到了第三个最大数2
轮数的规律:ary.length-1
两两比较规律:ary.length-1-已经必过的轮数
// 冒泡排序
var ary = [3, 2, 5, 7, 8, 1];
function fn(ary) {
// 轮数
for (i=0;i<ary.length-1;i++) {
// 两两进行比较
for (j=0;j<ary.length-1-i;j++) {
// 当前项比下一项大,就换位置
if(ary[j]>ary[j+1]) {
// 定义一个新变量临时存储一个值,方便交换两个数值
var temp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = temp;
}
}
}
return ary;
}
var res = fn(ary);
console.log(res);
2、算法之快速排序
快速排序的原理
// 快速排序
var ary2 = [11, 12, 52, 33, 77, 88, 99, 18];
function quickSort(ary) {
// 如果传入的原数组、左边数组、右边数组长度小于1,就不用分左右数组了
if (ary.length <= 1) {
return ary;
}
// 中间项的索引(注意:索引需要向下取整)
var centerIndex = Math.floor(ary.length/2);
// ary.splice() 返回值是一个数组!!!
// 删除中间项并且获取中间项!!
// var centerValue = ary[centerIndex]; 只能获取到中间项
var centerValue = ary.splice(centerIndex,1)[0];
// 定义左右空数组
var leftAry = [], rightAry = [];
for (i=0;i<ary.length;i++) {
// 小于中间项,push到左数组;大于中间项,push到右数组
if (ary[i]<centerValue) {
leftAry.push(ary[i]);
}else {
rightAry.push(ary[i]);
}
}
// 自己调用自己就是递归;
// 递归每个左右数组
return quickSort(leftAry).concat(centerValue,quickSort(rightAry));
}
var res2 = quickSort(ary2);
console.log(res2);
3、递归
自己调用自己就是递归
// 打印1到10
function fn(num) {
if (num>10) {
return;
}
console.log(num);
fn(num+1);
}
console.log(fn(1));
// for循环1加到100
function sum() {
var res = 0;
for (i=0;i<=100;i++) {
res+=i;
}
return res;
}
var res3 = sum();
console.log(res3);
// 递归求和
function total(num) {
if (num>100) {
return 0;
}
return num += total(num+1);
}
var res4 = total(1);
console.log(res4);
// 求1到100中同时能被2整除又能被3整除的所有数之和
function sum2(num) {
if (num>100) {
// return 指令一个是返回一个指定数据给主调函数,
// 另外的一个作用就是 结束 所在函数的执行
return 0;
}
if (num%2==0 && num%3==0){
return num + sum2(num+1);
}
return sum2(num+1);
}
var res5 = sum2(1);
console.log(res5);
// for循环实现累加
function sum3() {
var total = 0;
for (i=1;i<=100;i++) {
if (i%2==0 && i%3==0) {
total += i;
}
}
return total;
}
var res6 = sum3();
console.log(res6);
二、字符串的常用方法
1、charAt
- 作用:获取指定索引位置的那个字符串
- str[索引] 和 str.charAt(索引) 基本一样;区别在于:
- 如果超出了字符串中的长度,获取结果的不同:
- str[索引] 得到的是undefined
- str.charAt(索引) 得到的是””
- 如果超出了字符串中的长度,获取结果的不同:
var sty="123";
undefined
sty[0];
"1"
sty[100];
undefined
sty.charAt(100);
""
2、charCodeAt
- 作用:获取字符串中特定索引对应字符的ASCII值(十进制)
var str = "1233";
undefined
str.charCodeAt(1);
50
3、indexOf/lastIndexOf
- 作用:检索某个字符在字符串中首次/最后一次出现的索引位置
var str = "1233";
undefined
str.charCodeAt(1);
50
str.indexOf(2);
1
str.lastIndexOf(3);
3
4、slice
- 作用:slice(n, m) 从索引n开始复制到索引m位置(不包含m项)的字符串
- 参数:可以是负数
var str = "1233";
undefined
str.slice(1, 3);
"23"
slice()和substring()的区别:slice()参数可以为负数,substring()的参数不可以为负数
var str = "1233";
undefined
str.substring(-3,-1);
""
str.substring(1,3);
"23"
str.slice(1,3);
"23"
str.slice(-3,-1);
"23"
5、substring
- 作用:同slice(n, m)
- 参数:不可以是负数
6、substr(n, m)
- 作用:从索引n开始截取m个
- 参数:
- n: 从索引n开始截取字符串
- m: 截取m个
var str = "1233";
undefined
str.substring(1, 3)
"23"
str.substr(1, 3);
"233"
7、toUpperCase() / toLowerCase()
- 作用:字符串的大小写转化
- 参数:无参数
str="12345zhu";
"12345zhu"
str.toUpperCase();
"12345ZHU"
str.toLowerCase();
"12345zhu"
8、replace(n, m)
- 作用:把字符串中的某些字符替换成别的字符
- 参数:str.replace(n, m)
- n: 要替换的字符 ,还可以是正则表达式
- m: 要替换成的字符
str="12345zhu666zhu";
"12345zhu666zhu"
str.replace("zhu", "猪");
"12345猪666zhu"
str.replace("zhu", "猪").replace("zhu", "pig");
"12345猪666pig"
str.replace(/zhu/g, "猪");
"12345猪666猪"
9、split() 把字符串转成数组
- 作用:把 字符串按照指定的分隔符,分成数组
- 参数:分隔符
var str = "10:20:30";
undefined
str.split(":");
(3) ["10", "20", "30"]
var str = "102030";
undefined
str.split("");
(6) ["1", "0", "2", "0", "3", "0"]
str.split(" ");
["102030"]
三、字符串的思考题
1、”2019-8-18 12:32:18”; ==>”2019年08月18日 12时32分18秒”
// "2019-8-18 12:32:18"; ==>"2019年08月18日 12时32分18秒"
function zero(num) {
// num小于10的时候給前边加个0
return num<10?"0"+num:num;
}
var str = "2019-8-18 12:32:18";
var strs = str.split(" ");
var str1 = strs[0].split("-");
var str2 = strs[1].split(":");
var time = str1[0].concat("年", str1[1], "月", str1[2], "日", " ", str2[0], "时", str2[1], "分", str2[2], "秒");
var time2 = zero(str1[0]) + "年" + zero(str1[1]) + "月" + zero(str1[2]) + "日" + " " + zero(str2[0]) + "时" + zero(str2[1]) + "分" + zero(str2[2]) + "秒";
console.log(time);
console.log(time2);
2、str =”https://www.baidu.com?name=zhufeng&age=10&id=14“; ==> { name: ‘zhufeng’, age: ‘10’, id: ‘14’ }
// str ="https://www.baidu.com?name=zhufeng&age=10&id=14"; ==> { name: 'zhufeng', age: '10', id: '14' }
var str ="https://www.baidu.com?name=zhufeng&age=10&id=14";
function getParms(str) {
var obj = {};
var strs = str.split("?")[1].split("&");
for (i=0;i<strs.length;i++) {
var item = strs[i];
var key = item.split("=");
obj[key[0]] = key[1];
}
return obj;
}
var res = getParms(str);
console.log(res);