数组的定义和基本使用(简介和定义、数组类型的检测)
数组的常用方法
数组的算法(遍历相关算法、数组去重和随机样本、冒泡排序、二位数组)
认识引用类型(什么是引用类型、深克隆和浅克隆)
1、简介和定义
三种定义数组的方式
var arr1 = [22, 4, 5, 556, 55] //定义数组方法1
var arr2 = new Array('22', 22, 55, 88) // 定义数组方式二(构造器)
var arr3 = new Array(4)// 定义方式3 得到的是4个undefined
console.log(arr1, arr2, arr3)
访问数组项
console.log(arr1[1]) // 4
console.log(arr1[0])// 22
console.log(arr2[1])// 22
console.log(arr2[100000]) // undefined
数组的长度
console.log(arr1.length)//5
更改数组项
arr1[0]++
arr1[1] = 'hihi'
arr1[5] = '120'
console.log(arr1) //[23, "hihi", 5, 556, 55,120]
遍历数组项目
for (var i = 0; i < arr1.length; i++) {
console.log(arr1[i])
}
2、数组类型的检测(Array.isArray()方法可以用来检测数组)
注意:typeof 检测数组是object类型
var obj = { name: '赵云', sex: '男' }
var arr4 = [3, 4, 4, 5, 6]
console.log(Array.isArray(obj)) //false
console.log(Array.isArray(arr4)) //true
3、数组的常用方法
push() 在尾部插入
pop() 在尾部删除
unshift() 在头部添加
shif() 在头部删除
splice() 方法
slice() 方法(string可使用)
join和split方法 (数组的join()方法可以使数组转为字符串;字符串的split()方法可以使字符串转为数组。)
concat()(合并连接多个数组)
reverse() 数组反转
indexOf和includes()
头尾操作的方法
// push() 在尾部插入
// pop() 在尾部删除
// unshift() 在头部添加
// shif() 在头部删除
var arr5 = [1, 2, 3, 5]
// 注意:方法就是打点调用的函数,所以是数组打点调用他们
arr5.push(12) // [1,2,3,5,12]
arr5.pop() //[1,2,3,5]
arr5.unshift(99, 45)// [99,45,1,2,3,5]
arr5.shift() // [45,1,2,3,5]
splice() 方法
var spliceArr = [23, 434, 56, 7, 8, 9]
spliceArr.splice(1, 2, '添加1', '添加2')
console.log(spliceArr) //[23, "添加1", "添加2", 7, 8, 9]
spliceArr.splice(1, 3)
console.log(spliceArr) //[23, 8, 9]
spliceArr.splice(2, 0, '添加')
console.log(spliceArr) //[23, 8, "添加", 9]
slice() 方法(string可使用)
var sliceArr = [3, 4, 5, 6, 7]
console.log(sliceArr.slice(1, 3))//[4, 5]
join和split方法 (数组的join()方法可以使数组转为字符串;字符串的split()方法可以使字符串转为数组。)
var str = '2060/20/30'
var arr6 = [12, 34, 56, 77]
console.log(arr6.join() === arr6.toString()) //true
console.log(arr6.join('*')) //12*34*56*77
console.log(str.split('/')) //["2060", "20", "30"]
concat()(合并连接多个数组)
var ar = [1, 3, 3, 4, 5]
var ar1 = [3, 4, 5, 6]
var ar2 = [3, 4, 5, 6]
console.log(ar.concat(ar1, ar2 )) // [1, 3, 3, 4, 5, 3, 4, 5, 6,3, 4, 5, 6]
reverse() 数组反转
var reverseArr = [1, 2, 3, 4, 6]
console.log(reverseArr.reverse()) //[6, 4, 3, 2, 1]
indexOf和includes()
// indexof()方法的功能是搜索数组中的元素,并返回它所在的位置,如果元素不存在,则返回 - 1
// includes()方法的功能是判断一个数组是否包含一个指定的值,返回布尔值
var indeArr=[2,3,4,5,6,7]
console.log(indeArr.indexOf('6')) // 1
console.log(indeArr.includes(4)) //true
sort() 排序()
4、遍历相关算法
累加器
var scoreArr = [1, 3, 4, 5, 65, 6, 7]
var sun = 0
for (var i = 0; i < scoreArr.length; i++) {
sun += scoreArr[i]
}
console.log(sun) //91
求一组数组的最大值和最小值
var arr = [22, 3, 44, , 55, 667, 56, 78, 899]
var min = arr[0]
var max = arr[0]
for (var i = 1; i < arr.length; i++) {
if (min < arr[i]) {
min = arr[i]
}
if (max > arr[i]) {
max = arr[i]
}
}
console.log(min, max)
数组去重
var arr1 = [2, 4, 4, 5, 5, 62, 4, 56, 4]
var empey = []
for (var i = 0; i < arr1.length; i++) {
if (!empey.includes(arr1[i])) {
empey.push(arr1[i])
}
}
console.log(empey)
for (var i = 0; i < arr1.length; i++) {
for (var j = i + 1; j < arr1.length; j++) {
if (arr1[i] == arr1[j]) {
arr1.splice(j, 1)
}
}
}
console.log(arr1)
数据样本(在一组数种随机三(n)个值)
var arr2 = [2, 1, 4, 5, 6, 7]
for (var i = 0; i < 3; i++) {
var n = parseInt(Math.random() * arr2.length);
console.log(arr2[n]) // 随机三位
arr2.splice(n, 1)
}
console.log('-----------------------------')
冒泡排序(经典算法)
var arr3 = [6, 2, 9, 3, 8, 1]
var len = arr3.length;
for (var i = 1; i < len; i++) {
console.log(1)
for (var j = 0; j < len - i; j++) {
if (arr3[j] > arr3[j + 1]) { //相邻元素两两对比
var temp = arr3[j + 1]; //元素交换
arr3[j + 1] = arr3[j];
arr3[j] = temp;
}
}
}
console.log(arr3, '444')
var arr4 = [1, 2, 3, 58, 689, 7, 4]
for (var i = 1; i < arr3.length; i++) {
for (var k = arr3.length - i - 1; k >= i; k--) {
if (arr3[k] > arr3[k + 1]) {
var temp = arr3[k]
arr3[k] = arr3[k + 1]
arr3[k + 1] = temp
}
}
}
console.log(arr3)
5、二维数组
var matrix = [
[1, 2, 34, 4, 888],
[2, 3, 4, 56, 5000],
[2, 3, 4, 56],
]
for (var i = 0; i < matrix.length; i++) {
for (var j = 0; j < matrix[i].length; j++) {
console.log(matrix[i][j])
}
}
5、基本类型和引用类型
举例 当var a=b变量传值时 当用==比较时
基本类型值 Number String Boolean undefined null 内存种产生新的副本 比较值是否相等
引用类型 对象、数组 内存种不产生新的副本, 比较内存地址是否相同,
而是让新变量指向同一个对象 就是比较是否同一个对象
var a=3
var b=a
a++
console.log(a,b) //4 3
var a=[1,2,3,4,5,[1,5488]]
var b=a
console.log(a==b) //true
console.log([1,2,3,4,5,[1,5488]]==[1,2,3,4,5,[1,5488]]) //false
5、深克隆和浅克隆—浅克隆
var copyArr=[1,2,3,4,5,[1,5488]]
var reslut=[]
for(var i=0;i<copyArr.length;i++){
reslut.push(copyArr[i])
}
console.log(reslut==copyArr) // false
console.log(reslut[5]==copyArr[5]) //true