冒泡排序
小----->大(对比数组前一项和后一项 前一项大,就往后挪)
// 2. 冒泡排序
for (var k = 0; k < arr.length - 1; k++) {
for (var i = 0; i < arr.length - 1 - k; i++) {
if (arr[i] < arr[i + 1]) {
var temp = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = temp
}
}
}
console.log('冒泡排序结束后的arr: ', arr)
案例
// 1.
var obj = { name: 'Jack' }
function fn() {
obj.name = 'Rose' // 修改的 全局的 obj, 全局obj 被修改为 {name:'rose'}
obj = {} // 修改全局的 obj, 给一个新的空对象
obj.name = 'Jerry' // 修改全局的 obj, 给新对象添加一个 name属性 对应的值 jerry
console.log(obj.name) // Jerry
}
fn()
console.log(obj.name) // Jerry
var obj = { name: 'Jack' }
function fn() {
// obj.name = 'Rose' // 此时 obj 因为变量提升只提升定义, 所以为 undefined , 所以这里报错
var obj = {}
obj.name = 'Jerry'
console.log(obj.name) // Jerry
}
fn()
console.log(obj.name) // Jack
选择排序
/**
* 选择排序
*/
var arr = [9, 3, 6, 2, 4, 1, 8, 5, 7]
// 下标 0 1 2 3 4 5 6 7 8
console.log('原始数组arr: ', arr)
/**
* 第几次循环 假设谁是最小值 和谁交换 循环开始的值
* 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; k++) {
var minIndex = k // 假设当前最小数值 为 下标 0 的项
for (var i = k + 1; i < arr.length; i++) {
if (arr[minIndex] > arr[i]) {
minIndex = i
}
}
// 交换 真实最小的值 与 下标 0 的值
var temp = arr[k]
arr[k] = arr[minIndex]
arr[minIndex] = temp
}
console.log('选择排序结束后的 arr: ', arr)
数组的方法1
能改变原数组的方法:
-
push
-
语法:数组.push(数据)
-
作用:向数组末尾添加数据
-
返回值:追加数据后,数组最新的长度
-
var arr = [1, 2, 3, 500] console.log('原始数组: ', arr) 1. push var num = arr.push(500) console.log(arr) console.log(num) -
pop
-
语法:数组.pop( )
-
作用:删除数组的最后一项
-
返回值:删除的那一项数据
-
var arr = [1, 2, 3, 500] console.log('原始数组: ', arr) 2. pop var num = arr.pop() console.log(arr) // ---> [1, 2, 3] console.log(num) // ---> 500 -
unshift
-
语法:数组.unshift(数据)
-
作用:向数组头部添加数据
-
返回值:追加数据后,数组的最新长度
-
var arr = [1, 2, 3, 500] console.log('原始数组: ', arr) 3. unshift var num = arr.unshift(1000) console.log(arr) console.log(num) -
shift
-
语法:数组.shift( )
-
作用:删除数组头部(第一项)的数据
-
返回值:删除的哪一项数据
-
var arr = [1, 2, 3, 500] console.log('原始数组: ', arr) 4. shift var num = arr.shift() console.log(arr) console.log(num) -
reverse
-
语法:数组.reverse( )
-
作用:反转数组
-
返回值:反转后的数组
-
var arr = [1, 2, 3, 500] console.log('原始数组: ', arr) 5. reverse var num = arr.reverse() console.log('反转后的数组: ', arr) console.log('reverse的返回值: ', num) -
sort
-
语法:数组.sort( )
-
数组.sort(function(a,b){retrun a - b})-------从小到大排序
-
数组.sort(function(a,b){retrun b - a})-------从大到小排序
-
var arr = [1, 2, 3, 500] console.log('原始数组: ', arr) 6. sort 6.1 不传参数 var num = arr.sort() console.log('sort后的 arr: ', arr) console.log('sort 的返回值: ', num)var arr = [1, 2, 3, 500] console.log('原始数组: ', arr) 6.2 return a - b var num = arr.sort(function (a, b) { return a - b }) console.log('sort后的 arr: ', arr) console.log('sort 的返回值: ', num)var arr = [1, 2, 3, 500] console.log('原始数组: ', arr) 6.3 return b - a var num = arr.sort(function (a, b) { return b - a }) console.log('sort后的 arr: ', arr) console.log('sort 的返回值: ', num) -
splice
-
语法:数组.splice(开始索引下标,多少个)
-
语法:数组.splice(开始索引下标,多少个,数据1,数据2.....)------剪切数组中的某一段数据,将第三个参数开始,当成新数据插入到数组内
-
返回值:剪切后的数据(数组形式)
-
var arr = [1, 2, 3, 500] console.log('原始数组: ', arr) 7. splice 7.1 不传参数 var num = arr.splice(1, 3) console.log('splice 后的 arr: ', arr) console.log('splice 的 返回值: ', num) var arr = [1, 2, 3, 500] console.log('原始数组: ', arr) 7.2 传递参数 var num = arr.splice(1, 3, '数据1', '数据2', '数据3', '数据4') console.log('splice 后的 arr: ', arr) console.log('splice 的 返回值: ', num)
不会改变原数组的方法:
-
slice
-
语法:数组.slice(开始索引,结束索引)
-
参数特点:包含开始索引,不包含结束索引(到结束索引前一位);参数接受负数(相当于数组.length+负数);不传结束索引相当于写了数组.length; 一个参数都不传相当于复制整个数组,或者只传递第一个参数为0
-
作用:复制数组中的某一段数据
-
返回值:复制出来的内容
-
var arr = [100, 1, 101, 3, 2, 102] // 下标 0 1 2 3 4 5 console.log('原始数组: ', arr) 8. slice 8.1 正常传参 var num = arr.slice(1, 5) console.log('slice 后的 arr: ', arr) console.log('slice 的返回值: ', num)var arr = [100, 1, 101, 3, 2, 102] // 下标 0 1 2 3 4 5 console.log('原始数组: ', arr) 8.2 传递负数 var num = arr.slice(1, -1) // arr.length + (-1) ---> 6 + (-1) ---> 6 - 1 ---> 5 console.log('slice 后的 arr: ', arr) console.log('slice 的返回值: ', num)var arr = [100, 1, 101, 3, 2, 102] // 下标 0 1 2 3 4 5 console.log('原始数组: ', arr) 8.3 不传结束索引 相当于写了 数组.length var num = arr.slice(2) console.log('slice 后的 arr: ', arr) console.log('slice 的返回值: ', num)var arr = [100, 1, 101, 3, 2, 102] // 下标 0 1 2 3 4 5 console.log('原始数组: ', arr) // 8.4 一个参数都不传 相当于复制整个数组, 或者只传递第一个参数为 0 var num = arr.slice() console.log('slice 后的 arr: ', arr) console.log('slice 的返回值: ', num)
数组的方法2
-
concat
-
语法:数组.concat(数据1,数据2)
-
作用:将参数合并到指定数组内(如果参数写到了数组,那么会将数组的每一个值合并到指定数组)
-
返回值:合并后的数组
-
var arr = [1, 2, 300, 4, 5, 4, 4, 4, 4] // 下标 0 1 2 3 4 5 6 7 8 console.log('原始数组: ', arr) // 9. concat var num = arr.concat(100, 200, 'QF', 'haha', [600, 700, 800]) console.log('concat 后的 arr: ', arr) console.log('concat 的返回值: ', num) -
join
-
语法:数组.join(连接符)
-
参数可以不传,不传递默认按照逗号
-
作用:通过连接符连接数组的每一个值
-
返回值:连接好的数组
-
var arr = [1, 2, 300, 4, 5, 4, 4, 4, 4] // 下标 0 1 2 3 4 5 6 7 8 console.log('原始数组: ', arr) // 10. join // 10.1 传递参数 var num = arr.join('|') console.log('join 后的 arr: ', arr) console.log('join 的返回值: ', num)var arr = [1, 2, 300, 4, 5, 4, 4, 4, 4] // 下标 0 1 2 3 4 5 6 7 8 console.log('原始数组: ', arr) // 10.2 不传参数 var num = arr.join() console.log('join 后的 arr: ', arr) console.log('join 的返回值: ', num) -
indexOf
-
语法:数组.indexOf(数据)
-
语法:数组.indexOf(数据,开始索引)
-
作用:在数组内寻找指定数据
-
返回值:找到数据的时候,返回数据第一次出现的下标;没有找到数据的时候,返回 -1
var arr = [1, 2, 300, 4, 5, 4, 4, 4, 4] // 下标 0 1 2 3 4 5 6 7 8 console.log('原始数组: ', arr) // 11. indexOf var num = arr.indexOf(4, 5) console.log('indexOf 后的 arr: ', arr) console.log('indexOf 的返回值: ', num) -
lastIndexOf
-
语法:数组.lastIndexOf(数据)
-
语法:数组.lastIndexOf(数据,开始索引)
-
作用:在数组内寻找指定数据(倒叙寻找)
-
返回值:找到数据的时候,返回数据第一次出现的下标;找不到的时候,返回 -1
var arr = [1, 2, 300, 4, 5, 4, 4, 4, 4]
// 下标 0 1 2 3 4 5 6 7 8
console.log('原始数组: ', arr)
// 12. lastIndexOf
var num = arr.lastIndexOf(4, 4)
console.log('lastIndexOf 后的 arr: ', arr)
console.log('lastIndexOf 的返回值: ', num)
数组的方法3
数组的遍历方法:
- forEach
- 语法:数组.forEach(function(item,index,origin){ })
- 参数:
- 1.数组实际每一项的值
- 2.数组每一项对应的索引下标
- 3.原始的数组
- 作用:遍历数组
- 返回值:返回值是undefined 哪怕手写了return也是undefind
- map
- 语法:数组.map(function(item,index,origin){ })
- 参数:
- 1.数组实际每一项的值
- 2.数组每一项对应的索引下标
- 3.原始的数组
- 作用:映射数组
- 返回值:返回一个和原数组长度一样的数组,返回的数组的每一个值,取决参数的return怎么写
- filter
- 语法:数组.filter(function(item,index,origin){ })
- 参数:
- 1.数组实际每一项的值
- 2.数组每一项对应的索引下标
- 3.原始的数组
- 作用:过滤数组
- 返回值:过滤数组后的新数组,过滤条件取决于参数的return怎么写
- find
- 语法:数组.find(function(item,index,originn){ })
- 参数:
- 1.数组实际每一项的值
- 2.数组每一项对应的索引下标
- 3.原始的数组
- 作用:查找数据
- 返回值:在数组内找到的第一个数据(不是数组)
- findIndex
- 语法:数组.findIndex(function(item,index,origin){ })
- 参数:
- 参数:
- 1.数组实际每一项的值
- 2.数组每一项对应的索引下标
- 3.原始的数组
- 作用:查找数据 第一次出现的下标
- 返回值:在数组内找到的第一个数据出现的下标
- every
- 语法:数组.every(function(item,index,origin){ })
- 参数:
- 1.数组实际每一项的值
- 2.数组每一项对应的索引下标
- 3.原始的数组
- 作用:判断数组内数据是否全都满足条件
- 返回值:一个布尔值
- true-----数组内数据全都符合条件
- false-----数组内起码有一个数据不符合条件
- some
- 语法:数组.some(function(item,index,origin){ })
- 参数:
- 1.数组实际每一项的值
- 2.数组每一项对应的索引下标
- 3.原始的数组
- 作用:判断数组内数据是否有一项满足条件
- 返回值:一个布尔值
- true:表示数组内至少有一项满足条件
- false:数组内数据全部都不满足条件
- reduce
- 语法:数组.reduce(function(prve,item,index,origin{ },init)
- reduce方法的参数:
- 1.如果传递第二个参数init,执行次数和数组长度相同
- 2.如果不传递第二个参数init,默认第一值为数组第一项的值,并且执行次数在数组长度上减1
- 参数1的函数中4个形参的含义:
- 1.表示初始值或者数组第一项的值(具体是什么取决于是否传递init)
- 2.数组每一项实际的值
- 3.数组每一项实际的值对应的索引下标
- 4.原数组
- 作用:
- 累加(叠加)
- 返回值:循环运行结束后得到的值