数组的某个位置是空位,与某个位置是undefined不一样。若是空位,使用数组的foreach() 方法、for-in结构以及Object.keys() 方法进行遍历,空位都会被跳过。
判断数组 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,则整个方法的返回值就是trueevery()—所有元素的返回值都是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是从数组的第一个成员开始遍历。
