一、数组的遍历
1、使用for循环遍历
2、使用for...in循环:
for(index in 数组名){
循环体语句
}
3、使用for...of循环:
for( value of 数组名){
循环体语句
}
4、forEach循环遍历:
数组名.forEach(function(value,index){
函数体语句
})
5、使用map函数遍历数组:实际是对数组的过滤。返回一个新的数组,原数组不变
let 新数组名 = 原数组名.map(function(item){ //item表示数组元素
函数体语句
})
总结:正常的for循环可以根据自己设定遍历数组,效率也是最高的。for...in按顺序遍历数组的索引,for...of遍历数组的值,forEach两者都可以遍历出来。map遍历原数组的元素,再过滤(根据设定的条件)符合的元素返回到新数组中
二、排序算法
1、冒牌排序
for (let i = 0; i < arr.length; i++) {
for (j = i + 1; j < arr.length; j++) { //从小到大
if (arr[i] > arr[j]) {
let temp = arr[i]
arr[i] = arr[j];
arr[j] = temp;
}
}
}
2、快速排序(效率更高)
function quickSort(arr, begin, end) {
if (begin >= end) return;
let temp = arr[begin];
let i = begin;
let j = end;
while (i < j) {
while (arr[j] >= temp && j > i) {
j--
}
while (arr[i] <= temp && j > i) {
i++
}
if (j > i) {
let t = arr[i]
arr[i] = arr[j]
arr[j] = t
}
}
arr[begin] = arr[i]
arr[i] = temp
quickSort(arr,begin,i-1)
quickSort(arr,i+1,end)
}
let arr = [12, 125, 34, 45, 506, 44, 66, 77, 88, 99];
quickSort(arr,0,9)
console.log(arr)
三、数组的常用方法
1、push(值/变量):从数组的末尾向数组添加元素
2、pop():从数组的末尾删除元素,一次只删除一个,返回的是被删除的元素。无需传参
3、shift():从数组的首部删除元素
4、unshift(值/变量):从数组的首部插入元素
6、sort():排序函数。默认的是从小到大。(根据ASCII码值 排序)
7、reverse():将数组元素颠倒顺序
8、slice():切片函数:从原数组中截取部分元素组成新的数组。
9、splice():可以实现对数组元素的插入、删除和替换
10、indexOf(元素):从左向右查找元素的位置。
11、lastIndexOf(元素):从右向左查找元素的位置。
12、filter(function(value,index) {}可以实现对数组元素的"过滤",返回的元素构成一个新的数组
13、fill(值/变量):用给定的值或变量填充数组
14、every(function(value) { })满足条件,返回 true
15、includes() :判断一个数组中是否包含一个指定的值
四、函数的递归调用
1、递归调用:函数自己调用自己(即在函数的函数体语句中调用自己)
2、递归算法:
(1)用递归方式解决问题的前提
a、问题可以进行分解,分解得到的新问题的解法与原问题的解法相同
8! --> 8 * 7! --->7 * 6!-->.......-->2 * 1!
b、问题的分解过程必须有明确的结束条件
(2)递归的过程
a、自上而下分解问题:得到最简单的问题的解
b、自下而上回溯得到原问题的解
五、对象
1、使用字面量创建:{ }
属性名/方法名:值/方法
2、通过Object来创建对象:
对象名.属性名/方法名 = 值/方法
3、利用构造函数创建对象
this.属性名/方法名 = 值/方法
4、遍历对象的属性和方法:使用for...in循环
5、对象数组:数组中存放的是对象(数组中的每个元素都是对象)
6、内置对象
(1)Math对象:是一个内置对象,用于数学运算的。 不是函数对象,Math.属性名/方法名
(2)Date对象:是一个函数对象,使用new 运算符创建对象