数组的操作

    简单的将他们转换为数组的方法, 比如函数的参数arguments:

    基本操作

    常规的构造方法是循环遍历赋值,取值一般直接使用索引。常用的方法有:

    • pop(): Removes the last element from an array and returns that element.
    • shift(): Removes the first element from an array and returns that element.
    • reverse(): Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first.
    • sort(): Sorts the elements of an array in place and returns the array.
    • splice(): Adds and/or removes elements from an array.
    • unshift(): Adds one or more elements to the front of an array and returns the new length of the array.

    • 使用索引值: 插入或替换元素

    • push: 末尾添加元素
    • unshift: 首部添加元素
      特殊的,要提到一个函数,使用方法:

    参数需要注意一下:

    • start: 开始删除的位置
    • deleteCount: 删除的个数
    • [, item1[, item2[, …]]]: 替换的元素, 如果start超过了数组长度,实际上就是追加的效果,删除的元素小于添加的元素时候,也是追加效果。

      删除数组中指定元素

    删除首尾的方式是使用:popshift

    • forEach (js v1.6)
    • filter (js v1.6)
    • some (js v1.6)
    • every (js v1.6)
    • indexOf (js v1.6)
    • lastIndexOf (js v1.6)
    • reduce (js v1.8)
    • reduceRight (js v1.8)
      对于让人失望很多次的IE6-IE8浏览器,Array原型扩展可以实现以上全部功能,所以也就有了ES5-shim项目。马上都要到ES6得节奏了,这些再不熟悉就别做前端了。

    简化遍历的方法,使用起来是这样: 。callback默认带有三个参数:

    • currentValue
    • index
    • array
      thisArg是可选参数,代表可选的上下文参数(改变回调函数里面的this指向).如果这第2个可选参数不指定,则使用全局对象代替(在浏览器是为window),严格模式下甚至是undefined.

    注意: 和使用for循环遍历的区别是, forEach不会遍历纯粹的没定义的元素, 比如:

    every

    按照条件判断数组是否符合要求的作用,返回的是Boolean值,它会用回调函数去遍历所有的数组元素,一般需要制定return的条件。如不指定,默认返回false。找出所有满足的情况,不满足就退出执行。返回值只要是弱等于== true/false就可以了,而非非得返回 === true/false.

    按照条件判断数组是否符合要求的作用,返回的是Boolean值,它会用回调函数去遍历所有的数组元素,只要有符合的,就会返回true。如果回调函数不指定return值,默认返回false。效果就和forEach类似了。返回值只要是弱等于== true/false就可以了,而非非得返回 === true/false.

    fliter

    过滤,筛选的作用。返回的是一个新数组,根据回调函数去判断筛选元素。返回值只要是弱等于== true/false就可以了,而非非得返回 === true/false.

    映射的作用,将原数组的每个元素通过回调方法映射,返回一个同样大小的新数组。

    reduce

    callback函数接受4个参数:之前值、当前值、索引值以及数组本身。initialValue参数可选,表示初始值。若指定,则当作最初使用的previous值;如果缺省,则使用数组的第一个元素作为previous初始值,同时current往后排一位,相比有initialValue值少一次迭代。

    如果initialValue不存在,那么索引就从2开始,以后每次传递的previous就是上一个函数return的值。

    如果initialValue存在,那么传入的就作为第一次的previous值。

    reduceRightreduce相比,语法类似:。

    差别在于reduceRight是从数组的末尾开始的。

    参考资料