数组是最简单的内存数据结构。JavaScript里也有数组类型,用于存储一系列同一种数据类型的值。
数组与伪数组
伪数组(arrLike
),是一个类似数组的对象。例如
1 | obj = { |
function的arguments
对象,还有getElementsByTagName
、ele.childNodes
等返回的NodeList
对象,或者自定义的某些对象,这些都可以是伪数组。
数组跟数组一样按索引方式存储,具有length
属性。但是伪数组与数组的最重要区别在于,伪数组的原型链中不包括Array.prototype
。
伪数组转换成数组的方法有:
遍历伪数组并加入一个空数组
1
2
3
4var arr =[]
for(var i =0;i< arrLike.length; i++){
arr.push(arrLike[i])
}数组的
slice()
方法Array.prototype.slice.call(arrLike)
1
2
3
4
5function list() {
return Array.prototype.slice.call(arguments);
}
var list1 = list(1, 2, 3); // [1, 2, 3]ES6中的
Array.from()
方法1
2
3
4
5
6Array.from({
0:"kk",
1:18,
2:"文字文字",
length:3 });
//["kk", 18,"文字文字"]
数组属性
数组属性有Array.length
;get Array[]
;Array.prototype
数组方法
数组的操作方法比较多,详细可以查阅MDN。这里简要介绍几种常用的操作方法
举例var num = [1,2,3,4,5]
增删查的方法
查:可以通过索引访问数组元素,如num[1] //2
;
增:push
方法添加一个或者多个元素到数组末尾,如num.push[7,8]
;
unshift
方法将数值直接插入数组的首位,如num.unshift[-2,-1]
。
删: 删除数组最靠后的元素pop()
;删除数组首位元素shift()
;
另外,splice()
方法可以实现在任意位置添加或删除元素,例如
1 | num.splice(2,2) |
Array.prototype.forEach
forEach()
方法对数组的每个元素执行一次提供的函数,用法array.forEach(function(value,key){})
。需注意的是forEach()
不会在迭代之前创建数组的副本,已删除的项不会被遍历到。如果已访问的元素在迭代时被删除了(例如使用 shift()
),之后的元素将被跳过。
1 | function forEach(array,x){ |
Array.prototype.sort()
sort()
方法用原地算法对数组的元素进行排序,并返回数组。
array.sort(function(x,y){return x - y})
array.sort(function(x,y){return y -x})
1 | var a = [5,6,3,1,4,2] |
.join() .concat() .map() .filter() .reduce()
join()
方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。
1 | a = [1,2,'a'] |
concat()
方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
1 | a = [1,2,3];b=[4,5,6] |
map()
方法用于遍历数组,操作并收集返回新的数组
1 | a = [1,2,3] |
filter()
方法创建一个新数组, 其包含通过所提供函数实现的规则的所有元素。
1 | a = [1,2,3,4,5,6,7,8,9] |
reduce()
方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
1 | a.reduce(functiong(sum,n){ |
1 | var a =[1,2,3] |
1 | //计算所有奇数和 |