数组在前端开发中起到很重要的作用。下面主要是针对Array类型进行剖析。
下文主要参考:javascript中深入理解Array
一、基本定义
Array对象用于在单个变量中存放多个值。
let array = [true, 12, 'is true']
这里array是一个数组,数组中的值可以是不同类型的值。数组的长度和大小是可变的。
二、创建方式
(1)、Array构造函数
第一种方式就是通过Array构造函数来实现。
let newArr = new Array(5)
这里是的5表示创建的数组长度为5,并且该数组为空。
(2)、数组字面量
第二种方式可以通过数组字面量来实现。
let newArr = [] //创建一个新的数组
let newArr = [1,2,3,4,5] //创建存在值的数组。
这样就不需要调用Array构造函数了。
三、length属性
这里的length属性是可读的,也是可写的,我们不仅可以通过读取数组的length属性来拿到数组的长度,也可以通过修改数组的length属性来修改数组的值。
let newArr = [1, 2, 3, 4, 5, 6]
console.log(newArr) //[1,2,3,4,5,6]
newArr.length = 3
console.log(newArr) //[1,2,3]
newArr.length = 5
console.log(newArr) //[1,2,3, <2 empty items>]
四、数组的检测
我们可以通过instanceof
和Array.isArray
来进行判断。首先我们说一下instanceof
,如果在一个网页中存在多个框架,instanceof
就不再使用,因为存在多个框架,就会存在多个不同的Array
构造函数,这种情况就无法使用instanceof
来进行判断。
let newArr = [1,2,3,4]
console.log(newArr instanceof Array) //true
第二种方法是使用Array.isArray
let newArr = [1,2,3,4,5]
console.log(Array.isArray(newArr)) //true
五、数组的转化
我们可以将数组转化为字符串,可以使用toString()
方法,其内部是对每一项都调用toString()方法。
let newArr = [1,2,3,4,5]
console.log(newArr.toString()) //1,2,3,4,5
我们也可以将数组转化为字符串,使用toLocalString()
方法,其内部是对每一项都调用toLocaleString()
方法。
let newArr = [1,2,3,4,5]
console.log(newArr.toLocaleString()) //1,2,3,4,5
可以使用join方法来对数组进行转化。
let newArr = [1,2,3,4,5]
console.log(newArr.join()) //1,2,3,4,5
六、栈方法
我们可以使用数组来实现栈的数据结构,栈的结构是后进先出,这样可以使用push
方法来将元素放入,使用pop
方法将元素弹出。
let newArr = [1,2,3,4,5]
let res = newArr.push(6)
console.log(res) //6
let item = newArr.pop()
console.log(item) //6
console.log(newArr) //[1,2,3,4,5]
七、队列方法
我们可以使用数组来实现队列方法,队列是先进先出,在js中我们可以使用push来模拟进入队列的情况,可以使用shift()来模拟从队列首部删除的情况。
let newArr = [1,2,3,4,5]
newArr.shift() //1
newArr.push(6) //[2,3,4,5,6]
八、排序方法
对数组进行排序存在两种方法,一种是使用sort
,另一种使用reverse
。
1、sort方法
let nums = [1, 5, 10, 15, 20]
nums.sort()
console.log(nums) //[1,10,15,20,5]
这里为什么会显示这样排序,因为sort方法对数组中的每一个元素都调用
toString()方法,然后进行ascill码进行比较,数字类型的数据也会更改为字符串
类型的数据进行比较。
let nums = [1, 5, 10, 15, 20]
nums.sort((a, b) => a - b)
console.log(nums) //[1,5,10,15,20]
2、reverse()方法
reverse方法可以对数组进行翻转。
let newArr = [1, 2, 3, 4, 5, 12, 11]
console.log(newArr.reverse()) //11,12,5,4,3,2,1
九、操作方法
1、concat()方法
concat方法的参数可以是单个元素,数组,实现数组之间的拼接,并且返回一个新的数组。
let newArr = ["yellow", "green", "red"]
let arr2 = newArr.concat("black", ["orange"])
console.log(arr2) //[ 'yellow', 'green', 'red', 'black', 'orange' ]
console.log(newArr) //[ 'yellow', 'green', 'red' ]
2、slice()方法
数组的slice()方法可以实现得到数组的子数组的功能,返回的是一个新的数组。
如果为一个参数,则表示从当前值开始,到最后结束返回。
如果为两个参数,并且第一个参数小于第二个参数,在截取两者中间的数组返回,注意不包括第二个参数下标对应的值
。
如果为两个参数,并且第一个参数大于等于第二个参数,则截取的为一个空数组。
如果其中存在一个负数,则表示的下标应该加上数组的长度。
(1)
let newArr = ["yellow", "green", "red"]
let arr = newArr.slice(1,2)
console.log(arr) //"green"
(2)
let newArr = ["yellow", "green", "red", "black"]
let arr = newArr.slice(-2, -1)
console.log(arr) //["red"]
(3)、splice()方法
splice()方法存在三种功能,第一种是插入,第二种是删除,第三种是替换。
splice()可以存在任意参数。splice方法是在原数组上进行更改的。
(1)、删除
let newArr = ["yellow", "green", "red", "black"]
let arr = newArr.splice(1,2)
console.log(arr) //["green","red"]
console.log(newArr) //["yellow", "black"]
(2)、替换
let newArr = ["yellow", "green", "red", "black"]
let arr = newArr.splice(1,2,"pink")
console.log(newArr) //["yellow", "pink","black"]
console.log(arr) //["green", "red"]
(3)、插入
let newArr = ["yellow", "green", "red", "black"]
let arr = newArr.splice(1, 0, "pink")
console.log(newArr) //["yellow", "pink","green","red","black"]
console.log(arr) // []
十、位置方法
位置方法存在两个,一个是indeOf
和lastIndexOf
。下面将对这两个方法进行分别进行分析。
这里表示传入一个参数,indexOf默认从首部开始查找,lastIndexOf默认从尾部开
始查找
let newArr = ["yellow", "green", "red", "green", "black"]
let index = newArr.indexOf("green")
console.log(index) //1
let lastIndex = newArr.lastIndexOf("green")
console.log(lastIndex) //3
传入第二个参数表示从哪里开始查找。
let newArr = ["yellow", "green", "red", "green", "black"]
let index = newArr.indexOf("green", 2)
console.log(index) //3
let lastIndex = newArr.lastIndexOf("green", 2)
console.log(lastIndex) //1
十一、数组的迭代方法
(1)、every()
遍历每一个数组,如果每一个数组都满足某一个条件,则返回true,如果存在一个不满足则返回false。
let newArr = [1,2,3,4,5,6,7,8]
let result = newArr.every(function(item, index, array) {
return item < 10
})
console.log(result) //true
(2)、some()
some函数遍历每一个元素,如果存在一个元素满足条件的,则返回true,否则返回
false。
let newArr = [1,2,3,4,5,6,7,8]
let result = newArr.some(function(item, index, array) {
return item > 10
})Ar
}, 0)
console.log(result) //36