1. 冒泡排序:
var arr = [7, 4, 1, 6, 8, 9, 5, 2, 3] // 对这个数组进行冒泡排序,小数在前
for(var j = 0; j < arr.length - 1; j++){
for (var i = 0; i < arr.length - j - 1; i++){
if (arr[i] > arr[i+1]) {
var num = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = num
}
}
} console.log(arr)
2. 选择排序:
/**
* 第几次循环 假设谁是最小值 和谁交换 内循环从几开始
*
* k === 0 1 0 0 1
* k === 1 2 1 1 2
* k === 2 3 2 2 3
*/
for (var k = 0; k < arr.length - 1; k++){
var minIndex = k
for (var i = k + 1; i < arr.length ; i++){
if (arr[minIndex] > arr[i]){
minIndex = i
}
} var num = 0
num = arr[minIndex]
arr[minIndex] = arr[k]
arr[k] = num
}
3. 数据类型的区别
- 存储: 基本数据类型:直接存储在栈内存中 引用数据类型:数据本体存储在堆内存中,将指向堆内存的地址存储在变量名中,将变量名存储到栈内存中
- 赋值: 基本数据类型:直接将数据赋值给另一个变量,赋值完成后两个变量没有任何关系 引用数据类型:因为复杂数据类型中存储的是指向一个堆内存地址,所以赋值时是把这个地址赋给另一个变量所以修改另一个变量时会影响自身
- 比较: 基本数据类型:直接对数据进行对比 引用数据类型:因为变量内部存储的是一个地址,所以此时对比的是地址而不是真正的值
- 传参: 基本数据类型:将数据拷贝传递给形参所以函数对形参的修改不会影响外界 引用数据类型:将变量内部地址赋给形参也就是说函数内部的形参和外部的变量共享一个地址,修改形参会影响外界
4. 数组的常用方法:
数组的方法中只有1 - 7会改变原本数组
- push 语法:数组.push(数据) 作用:追加数据至数组末尾 返回值:追加数据后数组长度
- pop 语法:数组.pop() 作用:删除数组最后一项 返回值:删除的数据
- unshift 语法:数组.unshift(数据) 作用:将数据添加至数组开头位置 返回值:添加数据后的数组长度
- shift 语法:数组.shift() 作用:删除数组的第一项 返回值:删除的数据
- reverse 语法:数组.reverse() 作用:数组反转 返回值:反转后的数组
- sort 语法:数组.sort(function(a,b) {return a - b}/{return b - a}) // 传参 数组.sort() // 不传参 作用:对数组进行排序分为传参与不传参,传参时分为b - a与a - b,对数组进行排序,若为不传参时就是将数据变为字符串形式一位一位进行比较,传参时a - b是把数组从小到大排序,b - a是从大到小排序 返回值:将排序后的数组返回
- splice() !!!!重要 语法:数组.splice(开始索引,多少个)/数组.splice(开始索引,多少个,要插入的数据) 作用:截取数据(类似于剪切)并选择是否插入 返回值:截取的数据(以数组形式)
- slice() !!!!重要 语法:数组.slice(开始索引,结束索引) // 包头不包尾 作用:类似于复制(获取数据) 返回值:复制的数据 特点:1. 包头不包尾,包含开始索引,不包含结束索引 2.接受负数相当于数组.length + 负数 一个长度为7的数组(3,-2)也就是(3,7 - 2) (-4, -5)也就是(7 - 4, 7 - 5) 3.参数可以不传递 (4)结束下标不传时从[4]开始复制到结束,包含[4]的值 两个参数都不传时从开头复制到结尾
- concat() 语法:数组.concat(参数1,参数2,数据3,...) 作用:将小括号内的数据合并到当前数组中(做数组合并用) 返回值:将合并后的数组返回出来 若传递数组会将数组中每一项都放进来
- join() 语法:数组.join('连接符') 作用:通过连接符将数组的每一项都合并起来,若不传递连接符,默认传递逗号连接 返回值:连接后的数据(字符串类型) 可以传递其他特殊符号连接
- indexOf // 默认从[0]找到数组末尾 语法:数组.indexOf(数据) 作用:在数组中寻找你传入的数据 返回值:找到第一次找到的数据下标并且返回出去,若没有找到返回 -1 语法2:数组.indexOf(数据,寻找开始位置)
- lastIndexOf // 默认从数组末尾找到[0] 语法:数组.lastIndexOf(数据) 作用:在数组中寻找你传入的数据 返回值:找到第一次找到的数据下标并且返回出去,若没有找到返回 -1 语法2:数组.lastIndexOf(数据,寻找开始位置)
5.遍历数组的方法
- forEach 语法:数组.forEach(function (item, index, origin) {'遍历数组要执行的代码'}) 作用:遍历数组 返回值:forEach永远没有返回值,永远为undefined item: 数组中的每一项 index: 对应的下标 origin: 对应的原数组 forEach中function的形参按需选择书写某一项
- map 语法:数组.map(function (item, index, origin) {'映射数组要执行的代码'}) 作用:映射数组,映射出一个长度与原数组一样的数组,但是其中每一项的值取决于return 返回值:映射出来的数组 item:数组中的每一项 index: 对应的下标 origin: 对应的原数组 map中function的形参按需选择书写某一项 例:
var arr = [100, 200, 300, 400, 500]
var res = map (function (item, index, origin) {
return item * 2
})
console.log(res) // 此时输出[200, 400, 600, 800, 1000]
- filter 语法:数组.filter(function (item, index, origin){'要过滤的条件'}) 作用:过滤数组 返回值:过滤后的新数组,过滤条件取决于return 例:
var arr = [1, 2, 3, 4, 5, 6]
var res = arr.filter(function(item){
return item > 3
})
console.log(res) // 此时接收的是4, 5, 6
- find 语法:数组.find(function (item, index, origin){'要查找的条件'}) 作用:查找第一个出现的数据 返回值:在数组内找到的第一个符合条件的数据(不是数组),如果所有数据都不符合条件返回值为undefined 例:
var arr = [1, 2, 3, 4, 5, 6]
var res = arr.find(function(item){
return item > 3
})
console.log(res) // 此时接收的是4
- findIndex 语法:数组.findIndex(function (item, index, origin){'要查找的条件'}) 作用:查找第一个出现的数据的下标 返回值:在数组内找到的第一个符合条件的数据(不是数组)的下标,如果所有数据都不符合条件返回值为-1 例:
var arr = [1, 2, 3, 4, 5, 6]
var res = arr.findIndex(function(item){
return item > 3
})
console.log(res) // 此时接收的是4,下标为3
- every 语法:数组.every(function (item, index, origin){'要判断的条件'}) 作用:判断数组内是否所有值都符合条件 返回值:一个布尔值,true:所有值都符合条件,false:至少有一个值不符合条件 例:
var arr = [1, 2, 3, 4, 5, 6]
var res = arr.every(function(item){
return item > 3
})
console.log(res) // 此时1,2,3不满足条件所以返回值为false
- some 语法:数组.some(function (item, index, origin){'要判断的条件'}) 作用:判断数组内是否有符合条件的值 返回值:一个布尔值,true:至少有一个值符合条件,false:所有值都不符合条件 例:
var arr = [1, 2, 3, 4, 5, 6]
var res = arr.some(function(item){
return item > 3
})
console.log(res) // 此时4,5,6满足条件所以返回值为true
- reduce 语法:数组.reduce(function (prev,item,index,origin) {'要执行的代码'} init) 作用:累加数组中的每一项 返回值:return后跟的代码
var arr = [1, 2, 3, 4, 5]
arr.reduce(function (prev, item) {
return prev + item // 此时返回结果为执行完每一项相加,当init不给时,prev为数组[0],当init给了时,prev为init给的值
})