数组声明
1、字面量的方式声明数组
var arr = [3,4,5,6,7]
2、new运算符声明数组。传多个参数,这些参数就都是数组的值
var arr1 = new Array(4,5,6,7,8)
//如果要访问数组元素,可以通过索引(下标)都是从0开始的
console.log(arr[1]) //4
-
//一般如果数组固定了长度就不要像这种写法取改变,不严谨用new运算符声明数组,但是实参只传递一个,这一个实参是数组长度* 空数组 var arr2 = new Array(3) //arr2长度为3,但是3个值都是空的 //给arr2赋值,可以通过下标 arr2[0] = 6 //给arr2的第0个元素赋值为6 arr2[1] = 7 //给arr2的第1个元素赋值为7 arr2[2] = 8 //JS很宽容,多填了一个,就加进去了,length变成4了。就算数组元素超过本来的长度,length会自动加 arr2[3] = 9 console.log(arr2) //可以直接给arr2[6] arr2[6] = 10 //4,5就变成了empty,长度就变成了7 console.log(arr2) console.log(arr2.length) //长度 7
数组数据存放类型
var arr = [4,56,7,8,3]
var arr1 = [‘Tom’,‘Jim’,‘John’]
var str = ‘abc’
var arr2 = [34,‘Tony’,true,str,null,arr1]
*//数组的索引取值范围0~arr.length-1
//最后一个元素*
console.log(arr[arr.length-1])
*//在arr末尾追加一个元素*
arr[arr.length] = 20
console.log(arr)
*//再追加*
arr[arr.length] = 30
*//length是动态获取的,不是固定值*
二维数组
var arr = [
[1,2,3],
[4,5,6],
[7,8,9,30,4,65,76]
]
console.log(arr.length) //3
console.log(arr[0]) //[1,2,3]
var arr2 = arr[0] //arr2 = [1,2,3]
console.log(arr2[0]) //0
console.log(arr[0][0]) //0
console.log(arr[1][2]) //6
console.log(arr[2][5]) //65
稀疏数组
var arr = new Array(5)
arr[0] = ‘Tom’
arr[3] = ‘Tony’
console.log(arr)
数组遍历
1、for循环
var arr = [3,5,7,8,4] //这是一个稀疏数组
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]) //遇到空值时输出是undefined,而for in里面遇到空值会自动跳过
}
2、for in
for (var index in arr) {
//注意:index是数组的索引,它是字符串类型,但是并不影响取数据
console.log(index,arr[index])
}
3、for of:遍历数组的第三种方式,用的很少
for(var value of arr) {
console.log(value) //直接取值,不取下标。稀疏数组中的undefined也会被遍历出来
}
Array-API
var arr = [1,2,3,4]
var arr1 = [5,6,7,8]
// **concat** 数组合并,并不会修改源数组,而是得到一个新的数组
var arr2 = arr.concat(arr1, [10,10,10])
console.log(arr, arr1)
console.log(arr2)
// 以指定字符来把数组每个元素拼接成一个字符串
var str = arr.join('-')
console.log(str)
// 在arr的末尾追加一个或多个值,修改的是arr本身,**push**方法的返回值是新的长度
// var len = arr.push(20, 40)
var len = arr.push(20)
console.log(arr)
console.log(len) // 5
// 把arr的最后一个元素删掉,修改的也是源数组,pop方法的返回值是被删掉的那个元素
var num = arr.pop()
console.log(arr)
console.log(num)
// **shift**在开头删除,**unshift**在开头追加
// **reverse**数组元素反转,修改的是源数组
arr.reverse()
console.log(arr)
// arr当中按照指定的索引截取子数组,索引含头不含尾的,不会修改源数组,而是返回一个新数组
var arr3 = arr.slice(1,3) // 截图到的是索引1和2,不包含3
console.log(arr3)
var arr4 = arr.slice(2) // **slice**方法只传一个参数,意思就是截取到末尾
console.log(arr4)
var arr5 = arr.slice(-2, -1) // slice传递负数,负数代表到数第几个
console.log(arr5)
var arr6 = arr.slice(1, -2) // 从2开始,截取到倒数第二个结束,不包含到数第二个
console.log(arr6)
splice
splice修改的是源数组
var arr = [4,3,5,6,7,8]
// 把从2开始的数据删掉
arr.splice(2)
/*/ 从2开始,删除3个数,删除元素里包含开始索引的*
arr.splice(2,3)
// *从2开始,删除两个数,然后在删除位置用10去替换*
// arr.splice(2, 2, 10)
// *从第三个参数开始后面可以传任意多个参数,都是替换的值*
// arr.splice(2, 2, 10, 20, 30)
// *可以把第二个参数写成0,就是添加,可以在任意位置添加元素*
arr.splice(6, 0, 20)
sort:排序 arr.sort()
默认的sort是按照编码来排序,只要第一位分出顺序了,就不会看第二位
例如:
var arr = [5,24,6,27,33,1,24]
// 指定排序规则
arr.sort(function (a, b) {
// a和b是sort方法会依次去取数组里的元素
// 如果这里的返回值大于0,那么a和b就会交换顺序,不大于0就不交换
// return a - b // 升序
return b - a // 降序
})
console.log(arr)