• 检测数组:只考虑一个全局作用域的情况下可以使用value instanceof Array 来判断一个对象是否是数组;如果要考虑多个全局的作用域,则使用Object.prototype.toString.call(value) == "[object Array]"

  • 转换方法:toString toLocaleString  join

  • 栈方法:(后进先出)在数组末尾插入一项,在数组末尾弹出一项。push:在数组末尾插入一项或多项,并返回现在的数组长度;pop:弹出数组最后一项,并返回。

  • 队列方法:(先进先出)在数组末尾插入一项,在数组开头弹出一项。push,shift:在数组开头弹出一项。也可以用unshift,在数组开头插入一项,以及pop方法,在数组末尾弹出一项。

  • 排序方法:reverse:将原数组的顺序弄反。sort:传入一个比较的函数,将该数组重新排序。比较函数会传入两个参数,第一个参数是前一项,第二个参数是后一项,如果第一个参数应该位于第二个参数之前,则返回负数,如果两个参数相等,则返回零,如果第一个参数应该位于第二个参数之后,则返回正数。

  • 操作方法:concat:基于当前数组和传入参数创建一个新的数组。参数中如果是数组,则会将其每一项都添加到当前数组中,如果不是数组,则会将其添加到当前数组的末尾。

var a = [1, 2, 3];
var b = a.concat(4, [5, 6]);
console.log(b);   // 1,2,3,4,5,6

       slice:基于当前数组的一项或多项创建一个数组。slice可以传入一个或两个参数,即返回项在原数组中的起始位置和结束位置。如果只传入一个参数,则表示返回该参数指定位置到当前数组末尾的所有项。如果传入两个参数,则表示返回第一个参数指定的起始位置到第二个参数制定的末尾位置(不包括结束位置项)的所有项。slice是不会影响原数组的哦。

var a = [1, 2, 3, 4, 5];
var b = a.slice(2);
var c = a.slice(2, 3);
console.log(b);     // 3,4,5
console.log(c);     // 2

      splice:数组方法中最复杂的一个方法,splice需要传入两个或两个以上的参数,第一个参数是删除或插入项的起始位置,第二个参数是删除几项,第三个参数以及后面的参数表示插入的项。splice 会修改原数组的,返回值是删除的项。

var a = [1, 2, 3, 4, 5, 6];
a.splice(0, 2);                 // [3,4,5,6]
a.splice(1, 0, 7, 8);               // [1,7,8,2,3,4,5,6]
a.splice(1, 2, 7, 8);               // [1,7,8,4,5,6]
  • 位置方法:位置方法有两个,在ECMAScript5中才提供的。分别为indexOf()和lastIndexOf(),这两个方法都传入两个参数,第一个参数是需要查找的项,第二个参数是查找的起点位置。如果没有查到,则返回-1。其中在查找中比较每一项和第一个参数时是使用全等的操作符,类型也是需要相等的。

    在只支持ECMAScript3的老式浏览器中,可以使用jquery里面的$.inArray(val, arr) 方法。

var arr1 = ["1", 2, "3", "3", 1, 2, 5, 6];

// indexOf方法
console.log(arr1.indexOf(2));                   // 1
console.log(arr1.indexOf(2, 2));              // 5
console.log(arr1.indexOf(1));                   // 4   
console.log(arr1.lastIndexOf(2));               // 5
console.log(arr1.indexOf(99));                  // -1

  • 迭代方法:ECMAScript5定义了5个迭代方法,都有两个参数。第一个参数是在每一项上运行的回调函数,第二个参数是运行该函数的作用于对象。回调函数有三个参数,第一个参数是当前项,第二个参数是当前运行的项在数组中的位置,第三个参数是数组的对象。

    1)every:对数组中每一项都运行给定函数,当该函数对每一项都返回true,则返回true。

    2)filter:对数组中每一项都运行给定函数,将返回true的项组成一个数组并返回。

    3)forEach:对数组中每一项都运行给定函数,该方法没有返回值。

    4)map:对数组中每一项都运行给定的函数,将每一项函数的运行结果组成数组并返回。

    5)some:对数组中每一项都运行给定函数,只要有一项是返回true的,结果就返回true。

var arr1 = [1, 2, 3, 4];
var r = arr1.every(function(item, index, arr) {
   if (item > 0) {
       return true;
   }
});

console.log(r); // true

     ---------------------以上的方法都不会修改数组的值

  • 归并方法:ECMAScript5新加了两个归并数组的方法:reduce()和reduceRight()。这两个方法都会迭代数组中的所有项,然后构建一个最终的返回值。有两个参数,第一个参数是在每一项上执行的函数,第二个参数是归并基础的初始值。函数有四个参数:前一项,当前项,项的索引,数组对象。这个函数返回的任何值都会成为第一个参数传入下一项。

var arr2 = [1, 2, 3, 4];
var r1 = arr2.reduce(function(pre, cur, index, arr) {
   return pre + cur;
});
console.log(r1); // 10


前端悟饭