js基础查漏补缺——引用类型(Array类型)

288 阅读3分钟

二刷《JavaScript高级程序设计》弥补一刷的不足,一刷时阅读得很粗略,很多章节都只是粗略的看了一遍,所以二刷时一定要仔细的看懂。

创建方式

Array类型是平时开发中最常使用的类型。创建数组的基本方式有两种:

  1. Array构造函数
var arr = new Array() // 得到一个空数组

传递参数

// 如果传递的一个参数并且这个参数是数值类型, 则会按照该数值创建一个包含给定项数的数组
var arr1 = new Array(5) // 创建一个包含5项的数组
console.log(arr1) // [empty × 5]
// 如果传递的参数是其它类型,则会创建包含这项参数的数组
var arr2 = new Array('red') // ['red']
// 传递多个参数
var arr3 = new Array('red', 1, 2, 'pink') // ["red", 1, 2, "green"]
使用构造函数Array时也可以省略new操作符,执行结果相同
  1. 使用数组字面量方式
var arr1 = ['red', 'pink', 'orange']

检测数组

ECMAScript5新增了Array.isArray()来判断某个值是不是数组,返回值是布尔值

if(Array.isArray(arr)){
	// 如果arr是数组
}

数组方法

1. 栈方法

栈的特点是先进后出,数组项的插入和移除都在栈的尾部执行,运用push()和pop()方法实现栈的行为

  • push() —— 接收任意数量的参数,并将其逐个插入到数组的末尾,并返回数组修改后的长度
  • pop() —— 从数组末尾移除一项,并返回移除的那一项
var arr = ['red', 'yellow', 'blue']
var num = arr.push('pink')
console.log(num) // 4
var color = arr.pop()
console.log(color) // pink

push()和pop()方法都能改变原数组

2. 队列方法

队列的特点是先进先出,在队列的尾部添加项,在队列的前端移除项。使用js的push()和shift()方法可以实现队列的行为
shift() —— 移除数组中的第一项并返回该项的值, 同时数组的长度减1

var arr = ['green']
arr.push('red') // 2
arr.shift() // 'green'

与此相对,js还提供了unshift()方法
unshift() —— 在数组前端添加任意项,并返回数组改变后的长度

var arr = ['green''red']
arr.unshift('blue', 'pink') // 4
console.log(arr) // ['green', 'red', 'blue', 'pink']
   

3. 重排序方法

js中提供的数组重排序方法reverse()和sort()
reverse() —— 将数组反转, 返回反转后的数组,并改变原数组的排序

var arr = [1, 2, 3, 4, 5]
arr.revserse() // [5, 4, 3, 2, 1]
console.log(arr) // [5, 4, 3, 2, 1]

sort() —— 按升序排序数组项, sort()方法会调用每个数组项的toString()方法,对得到的字符串的字符ASCII码进行比较,即使数组中的每一项都是数值类型,sort()方法比较的也是字符串。返回排序后的数组,并改变了原数组

var sortArr = [10,'common', 1, 5, 'b','ver', 22, 80, 0, 'week']
console.log( sortArr.sort()) // [0, 1, 10, 22, 5, 80, "b", "common", "ver", "week"]

如果要对数值进行排序, sort()接收一个回调函数作为参数

var numberArr = [10, 3, 20, 15, 6]
var resultArr = numberArr.sort(function(num1, num2){
    return num1 - num2
})
// 返回负数, 第一个数应该排在第二个数前面
// 返回正数, 第一个数应该排在第二个的后面
// 返回0, 两个数相等
// 让数值更小的项排序靠前
console.log(resultArr) // 按照升序排序 [3, 6, 10, 15, 20]
// 如果要对数组进行降序排序,只需将返回的两个值交换位置即可
var resultArr = numberArr.sort(function(num1, num2){
    return num2 - num1
}) // [20, 15, 10, 6, 3]