遍历数组
- foreach()
- for-in 语句结构
- Object.keys() 方法
数组的某个位置是空位,与某个位置是undefined不一样。若是空位,使用数组的foreach() 方法、for-in结构以及Object.keys() 方法进行遍历,空位都会被跳过。
使用Array
-
判断数组
Array.isArray() 判断一个值是否为数组 -
增删数组
1.push() —在尾部添加元素
【用 push() 方法合并两个数组:Array.push.apply(arr1,arr2)】2.pop() —删除数组最后一个元素,并返回该元素
push() 和 pop() 方法结合使用,构成“后进先出”的栈结构
3.shift()—删除数组第一个元素,并返回该元素
push() 和 shift() 方法结合使用,构成“先进先出”的队列结构
4.unshift()—在数组的第一个位置添加元素
-
合并数组
concat()—用于多个数组的合并 -
转换为字符串
join() —以参数作为分隔符,将所有数组成员组成一个字符串返回
split()—把字符串转换为数组,第一个参数为分隔符 -
截取数组
slice()—提取数组的一部分,返回一个新数组,原数组不变【左闭右开】- 第一个参数为起始位置(从0开始),第二个参数为终止位置(但该位置的元素本身不包括在内)
- 若参数为负数,则表示倒数计算位置
- 一个重要应用,将类似数组的对象转为真正的数组
array.prototype.slice.call({0:‘a’,1:‘b’,length:2}) //[‘a’,‘b’]
splice()—删除原数组的一部分元素,并可以在被删除的位置添加新元素,返回值是被删除的元素(会改变原数组)
第一个参数是删除的起始位置,第二个参数是被删除的元素个数,若后面还有参数,则表示这些就是被插入数组的元素 -
排序数组
1.reserve()—颠倒数组(会改变原数组)
2.sort()—排序(会改变原数组)
【注意】sort()方法不是按照大小排序,而是按照对应字符串的字典顺序排序,故101排在11前面。以下代码则是从小到大排序(从大到小 return b-a 即可)
c.sort(function(a,b){ return a-b })
-
定位元素
1.indexOf()—给定元素在数组中第一次出现的位置,若没有则返回-1- 可接受第二个参数,表示搜索的开始位置
2.lastindexOf()—给定元素在数组中最后一次出现的位置,若没有则返回-1
- 可接受第二个参数,表示搜索的开始位置
-
迭代数组 map()
- map()—对数组所有元素依次调用一个函数,根据函数结果返回一个新数组
- map() 方法接受一个函数作为参数。该函数调用时,map() 方法会将其传入三个参数,分别是当前元素,当前位置和数组本身。
- map() 方法不仅用于数组,还可用于字符串,用来遍历字符串的每个字符。但不能直接使用,要通过函数的call() 方法间接使用,或者先将字符串转为数组,然后使用。
var upper=function(x){ return x.toUpperCase(); }; console.log([].map.call('abc',upper)) //[ 'A', 'B', 'C' ] console.log('abc'.split('').map(upper)) //[ 'A', 'B', 'C' ]
- map() 方法还可接受第二个参数,表示回调函数执行时this所指向的对象
var a=[1,2,3,4,5]; [2,3].map(function(e){ console.log(this[e]) },a) //3,4
- 若数组有空位,map() 方法的回调函数在这个位置不会执行,会跳过数组的空位,undefined和null不会跳过
-
迭代数组 forEach()
- forEach() 方法与map() 方法很相似,也是遍历数组的所有成员,执行某种操作,但forEach() 方法一般不返回值,只用来操作数据。如果需要有返回值,一般用map() 方法。
- forEach() 方法也可以接受第二个参数,用来绑定回调函数的this关键字
- forEach() 方法无法中断执行,总是会将所有成员遍历完
- forEach() 方法会跳过数组的空位,但不跳过undefined和null
- 也可用于类似数组的对象和字符串
-
过滤数组
- filter()—参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。
- filter() 方法的参数函数可以接受三个参数(当前元素的值,当前元素位置,整个数组)
- filter() 方法还可接受第二个参数,指定测试函数所在上下文对象(即this对象)
-
验证数组
- some()—只要有一个数组元素的返回值是true,则整个方法的返回值就是true
- every()—所有元素的返回值都是true,才返回true,否则返回false
【对于空数组,some() 方法返回false,every() 方法返回true】
- 上述两个方法的函数参数都接受三个参数(当前元素,当前位置,整个数组)
- 上述两方法还可接受第二个参数,用来绑定函数中的this关键字
-
汇总数组
-
reduce() —从左到右依次处理数组成员
-
reduceRight() —从右到左依次处理数组成员
此两方法的第一个参数都是函数,该函数接受以下四个参数::
(1)累积变量,默认为数组的第一个成员
(2)当前变量,默认为数组的第二个成员
(3)当前位置(从0开始)
(4)原数组
【前两个必须,后两个可选】利用reduce() 方法,可以对数组求和
Array.prototype.sum=function(){ return this.reduce(function(first,second){ return first+second; }) }; console.log([2,3,4,1,5].sum()) //15
如果要对累积变量指定初值,可以把它放在reduce() 和reduceRight() 方法的第二个参数
console.log( [1,2,3,4,5].reduce(function(x,y){ return x+y; },10)) //25
上面代码中,指定参数x的初值为10,数组从10开始累加,此时y是从数组的第一个成员开始遍历。
-