数组的概念
数组是一种数据类型,可以存储多个变量。
数据在内存中存储的方式
1.内置基本类型
只有一块栈空间, 存储的是数据。
2.引用类型
引用类型有两块存储空间,一块堆空间,存储的是真正的数据。
一块栈空间,存储的是堆空间的地址。
---------------------------------
数组定义的方式:
1.构造方法
注意:所有的引用类型都必须使用new开辟空间
new是在堆上开辟空间的关键字
Array是在内存开辟空间的模板
new Array(1, 2, 3, 4, 5)返回的是堆空间的地址
new只能和构造函数连用,不能单独使用
var arr = new Array(1, 2, 3, 4, 5);
console.log(arr);
2.字面量:用[]括起来的数据集合,每两个数据用逗号分开
var arr = [1, 2, 3, 4];
console.log(arr);
数组元素的访问
数组存储的变量,称为数组的元素。
如何访问数组的元素
数组名[下标]
下标是元素的索引
注意事项:1.从零开始
2.下标必须为自然数
3.每两个索引之间相差1
4.下标可以为变量
5.下标千万不要越界 0~数组长度长度-1
遍历
数组的遍历: 对数组的所有元素做相同的操作.
依赖于循环实现
数组元素的个数也称为长度
数组对象.length:数组的长度
遍历打印
console.log(arr[0])
console.log(arr[1])
console.log(arr[2])
for (var i = 0
console.log(arr[i])
}
遍历追加且打印
arr[0] += "嘤嘤嘤"
arr[1] += "嘤嘤嘤"
for (var i = 0
arr[i] += "钟薛糕"
console.log(arr[i])
}
数组逆序
var arr = [6, 5, 7, 4, 8, 3, 2, 9, 1, 0]
程序 = 算法 + 语法
var n = arr.length
交换时的中间变量
var t = 0
for (var i = 0
t = arr[i]
arr[i] = arr[n - i - 1]
arr[n - i - 1] = t
}
function reverse(arr) {
var n = a.length
交换时的中间变量
var t = 0
for (var i = 0
t = arr[i]
arr[i] = arr[n - i - 1]
arr[n - i - 1] = t
}
}
reverse(arr)
console.log(arr)
数组的常见函数(API),JS中万物皆为对象,
对象+点运算符就可以访问该对象的相关属性和方法。
学习API的方法
耐心的读文档
我们要使用别人创建的函数
如何使用?
1.研究函数的功能
2.研究参数
3.研究返回值
返回值 = 函数名(参数1,参数2。。。)
4.研究demo
push
功能: 尾插
参数:push(x1,[x2,x3...])
返回值:新数组的长度
var arr = ["大义灭亲", "印度巨蜥", "五一放假"]
var len = arr.push("鸡你太美", "迪丽热巴")
console.log(arr)
console.log(len)
pop
功能: 尾删
参数: 无
返回值: 被删除的元素
var arr = ["大义灭亲", "印度巨蜥", "五一放假"]
var x = arr.pop()
console.log(arr)
console.log(x)
unshift
功能:头插
参数:unshift(x1,[x2,x3...])
返回值:新数组的长度
var arr = [6, 5, 7, 4, 8, 3, 2]
var x = arr.unshift(0)
console.log(arr)
console.log(x)
shift
功能:头删
参数:无
返回值:被删除的元素
var arr = [6, 5, 7, 4, 8, 3, 2]
arr.shift()
var x = arr.shift()
console.log(arr)
console.log(x)
var arr = [6, 5, 7, 4, 8, 3, 2]
arr.push(11, 22)
arr.pop()
arr.shift()
arr.unshift(33, 44)
console.log(arr)
reverse
功能:逆序,直接改变原数组
参数:无
返回值:无
var arr = [6, 5, 7, 4, 8, 3, 2]
arr.reverse()
console.log(arr)
splice
功能:删除数组的某个区间,且可以用新数据代替,并返回被删除的数据,改变原数组
参数:splice(起始位置,偏移量,[x1,x2,x3....]) 偏移量只一共几个元素
返回值:被删除的元素
var arr = [6, 5, 7, 4, 8, 3, 2]
var arr1 = arr.splice(1, 3, "heihei", "haha")
arr.splice(3, 1)
console.log(arr)
console.log(arr1)
slice
功能:数组区间的截取,返回被截取的字符串,元素数组不变
参数:slice(起始位置,结束为止) 左闭右开 [2,5)
返回值:被截取的元素
var arr = [6, 5, 4, 7, 8, 3, 9, 2]
var arr1 = arr.slice(2, 5)
console.log(arr1)
concat
功能:数组的拼接,不会改变原数组
参数:concat(数组)
返回值:新数组
var arr1 = [6, 5, 4, 7]
var arr2 = [8, 3, 9, 2]
var arr3 = arr1.concat(arr2)
console.log(arr3)
join
功能:将数组转换为字符串
参数:join([分隔符]) 默认是逗号
返回值:被转换的字符串
var arr = [6, 5, 4, 7]
var str = arr.join("嘿嘿")
console.log(str)
多维数组
多维数组:一个数组中的元素,依然是一个数组
多维数组是由一维数组嵌套实现的
var arr = [
[1, 2], //arr[0][0]
[3, 4, 5],
[6, 7, 8, 9]
]
console.log(arr[1][2])
console.log(arr)
for (var i = 0
// console.log(arr[i])
for (var j = 0
document.write(arr[i][j] + " ")
}
document.write("<br>")
}
冒泡排序
对于数组元素的一种排序方法
核心思想:两两比较
外层循环决定趟数:N-1
内层循环决定每趟的次数:N-i(趟)-1
var arr = [6, 5, 7, 4, 8, 3, 9, 2, 0, 1]
var t
for (var i = 0
for (var j = 0
if (arr[j] > arr[j + 1]) {
t = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = t
}
}
}
console.log(arr)