超能刚哥

JavaScript数组API

发表于2016-02-21

1.静态方法

直接由Array这个对象进行调用,无需实例化也无需从原型上调用

1.1 Array.isArray()

顾名思义,Array.isArray() 用来判断一个对象是不是一个数组

var a = ['1', 3, 4];
var b= 'Hi';

Array.isArray(a);    // true
Array.isArray(b);    // false
Array.isArray(Array.prototype);    // true 鲜为人知的事实:其实 Array.prototype 也是一个数组。

该方法是ES5的规范,可做如下Polyfill处理:

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

1.2 Array.from()

Array.from() 方法可以将一个类数组对象或可迭代对象转换成真实的数组。

// 将类数组对象(arguments)转换成数组
(function () {
    var args = Array.from(arguments);
    return args;
})(1, 2, 3);                            // [1, 2, 3]

// 将可迭代对象(Set 对象)转换成数组
Array.from(new Set(["foo", window]));       // ["foo", window]

// Map 对象也可以
var m = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(m);                          // [[1, 2], [2, 4], [4, 8]]  

// 字符串对象既是类数组又是可迭代对象
Array.from("foo");                      // ["f", "o", "o"]

// 使用 map 函数转换数组元素
Array.from([1, 2, 3], x => x + x);      // [2, 4, 6]

// 生成一个数字序列
Array.from({length:5}, (v, k) => k);    // [0, 1, 2, 3, 4]

该方法是ES6规范,具体Polyfill请参见:Array.from Polyfill

1.3 Array.of()

Array.of() 方法会将它的任意类型的多个参数放在一个数组里并返回。
Array.of() 和 Array 构造函数不同的是:在处理数值类型的参数时,Array.of(42) 创建的数组只有一个元素,即 42, 但 Array(42) 创建了42个元素,每个元素都是undefined。

Array.of(1);         // [1]
Array.of(1, 2, 3);   // [1, 2, 3]
Array.of(undefined); // [undefined]

该方法是ES6的规范,可做如下Polyfill处理:

if (!Array.of) {
  Array.of = function() {
    return Array.prototype.slice.call(arguments);
  };
}

2 原型方法

2.1 Mutator方法

下面的这些方法会改变调用它们的对象自身的值(本文只列出常用的)

2.1.1 Array.prototype.pop()

该方法用于删除数组的最后一个元素并返回被删除的元素

var a = [1,3,4,'a'];
console.log(a.pop()); // a
console.log(a); // [1, 3, 4]
2.1.2 Array.prototype.push()

该方法用于向数组尾部追加一个或者多个元素,返回的是新数组的长度

var a = [1,3,4];
console.log(a.push('hi', 5)); // 5
console.log(a); // [1, 3, 4, 'hi', 5]
2.1.3 Array.prototype.reverse()

该方法用于将传入的数组的元素顺序进行反转,并返回该数组的引用

var a = ['one', 'two', 'three'];
console.log(a.reverse());    // ['three', 'two', 'one']
console.log(a);   // ['three', 'two', 'one']
2.1.4 Array.prototype.shift()

该方法删除数组的第一个元素,并返回被删除的元素

var a = [1,3,4,'a'];
console.log(a.shift()); // 1
console.log(a); // [3,4,'a']
2.1.5 Array.prototype.sort()

该方法对数组的元素做原地的排序,并返回这个数组。 sort 可能不是稳定的。默认按照字符串的UNICODE码位点(code point)排序。

var a = [1,3,2,6,5,'a']
console.log(a.sort()); // [1, 2, 3, 5, 6, "a"]
2.1.6 Array.prototype.splice()

该方法用于从指定位置删除/添加元素,并返回由被删除掉的元素组成的一个数组

语法: array.splice(start, deleteCount[, item1[, item2[, …]]])

var a = [1,2,3,4,5,6];
console.log(a.splice(3,2,7,8));  //[4, 5]
console.log(a);  //[1, 2, 3, 7, 8, 6]

注意要防止splice和slice的混淆,splice会改变数组自身!

2.1.7 Array.prototype.unshift()

该方法用于在数组开头插入一个或多个元素

var a = [1,2,3];
console.log(a.unshift(1)); // 4
console.log(a); // [1, 1, 2, 3]
该文章暂无评论,赶快抢占沙发!

发表评论

电子邮件地址不会被公开。 必填项已用*标注