Array原型之变异方法

Array

Array对象是用于构造数组的全局对象.

概述

数组对象是一个有序的数据(原始类型或对象类型)集合, 是一种类列表对象,它的原型提供了数组操作的方法.
数组只能用整数作为数组元素的索引,而不是字符串,且从0开始,第一个元素的索引为0.使用非整数并通过[].来访问数组或设置数组元素时,所操作的并不是数组列表的元素,而是数组对象属性集合上的变量.数组对象的属性和数组元素列表是分开存储的,并且数组的遍历和修改操作也不能作用于这些命名属性.

1
2
3
4
5
6
var arr = [];
arr['zero'] = 'zero';
arr[0] = 0;
arr.forEach(item => console.log(item))

// 0

原型方法

变异方法

Array.prototype.push()

描述 :
在数组末尾添加一个或多个元素.
语法 :

arr.push(element0 ..., elementN)

elementN : 将要添加到数组末尾的元素.
返回值 : 被改动后的原数组的length值, 且原数组被改变.

1
2
3
4
5
let arr0 = [3, 2, 1];
let arr0Len = arr0.push('Array');
console.log('arr0:', arr0, 'arr0Len:', arr0Len);

// arr0: [3, 2, 1, 'Array'] arr0Len: 4;

Array.prototype.unshift()

描述 :
在数组开头添加一个或多个元素.
语法 :

arr.unshift(element1, ..., elementN)

elementN : 将要添加到数组开头的元素.
返回值 : 被改动后的原数组的length值, 且原数组被改变.

1
2
3
4
5
let arr0 = [3, 2, 1];
let arr0Len = arr0.unshift('Array');
console.log('arr0:', arr0, 'arr0Len:', arr0Len);

// arr0: ['Array', 3, 2, 1] arr0Len: 4;

Array.prototype.pop()

描述 :
从数组中删除最后一个元素.
语法 :

arr.pop()

返回值 : 被删除的数组元素(空属组调用, 则返回undefined), 且原数组被改变.

1
2
3
4
5
let arr0 = [3, 2, 1];
let ele = arr0.pop();
console.log('arr0:', arr0, 'ele:', ele);

// arr0: [3, 2] ele: 1;

Array.prototype.shift()

描述 :
从数组中删除第一个元素.
语法 :

arr.shift()

返回值 : 被删除的数组元素(空属组调用, 则返回undefined), 且原数组被改变.

1
2
3
4
5
let arr0 = [3, 2, 1];
let ele = arr0.shift();
console.log('arr0:', arr0, 'ele:', ele);

// arr0: [2, 1] ele: 3;

Array.prototype.splice()

描述 :
从数组中删除指定数量的元素并添加向数组添加元素.
语法 :

array.splice(start[, deleteCount[, element1[, ...[, elementN]]]])

start : 指定修改位置(从0计数).
deleteCount 要移除的数组元素个数. 默认值为 this.length - start.
elementN : 要添加的数组元素.
返回值 : 由被删除的元素组成的数组, 且原数组被改变.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
let arr0 = [3, 2, 1];
let arr00 = arr0.splice(2, 0, 4, 5, 6);
console.log('arr0:', arr0, 'arr00:', arr00);

// arr0: [3, 2, 4, 5, 6, 1] arr00: [];

let arr1 = [3, 2, 1];
let arr11 = arr1.splice(2, 1, 4, 5, 6);
console.log('arr1:', arr1, 'arr11:', arr11);

// arr1: [3, 2, 4, 5, 6] arr11: [1];

let arr3 = [3, 2, 1];
let arr33 = arr3.splice(1, 2);
console.log('arr3:', arr3, 'arr33:', arr33);

// arr3: [3] arr33: [2, 1];

let arr4 = [3, 2, 1];
let arr44 = arr4.splice(3, 0 , 4, 5, 6);
console.log('arr4:', arr4, 'arr44:', arr44);

// arr4: [3, 2, 1, 4, 5, 6] arr44: [];

Array.prototype.sort()

描述 :
用原地算法对数组的元素进行排序.
语法 :

arr.sort([compareFunction])

compareFunction : 用来指定按某种顺序进行排列的函数. 如果省略, 元素按照转换为的字符串的各个字符的Unicode位点进行排序. 指明了 compareFunction, 那么数组会按照调用该函数的返回值排序. a 和 b 是两个将要被比较的元素:

  • compareFunction(a, b) 小于 0, 那么 a 会被排列到 b 之前;
  • compareFunction(a, b) 等于 0, a 和 b 的相对位置不变;
  • compareFunction(a, b) 大于 0, b 会被排列到 a 之前;

返回值 : 排序后的数组.

1
2
3
4
5
let arr0 = [3, 4, 2, 5, 1];
let arr00 = arr0.sort((a, b) => a-b);
console.log('arr0:', arr0, 'arr00:', arr00);

// arr0:, [1, 2, 3, 4, 5] arr00: [1, 2, 3, 4, 5];

Array.prototype.reverse()

描述 :
将数组中元素的位置颠倒.
语法 :

arr.reverse()

返回值 : 位置颠倒后的数组.

1
2
3
4
5
let arr0 = [3, 2, 1];
let arr00 = arr0.reverse();
console.log('arr0:', arr0, 'arr00:', arr00);

// arr0: [1, 2, 3] arr00: [1, 2, 3];

Array.prototype.copyWithin()

描述 :
将数组的某一部分浅复制到指定位置.
语法 :

arr.copyWithin(target[, start[, end]])

target : 索引起始为0. 被复制的内容将要替换的位置. 如果是负数, target将从 this.length + target开始计算.
start : 起始索引, 默认值为0. 被复制内容的起始位置, 包括start位置的元素. 如果是负数, 则开始索引会被自动计算成为 this.length + start.
end : 终止索引, 默认值为this .length, 索引起始为0. 被复制内容的结束位置, 但不包括end位置的元素. 如果是负数. 则终止索引会被自动计算成为 this.length + end.
返回值 : 被改动后的原数组. 数组内容变化, 长度不变.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
let arr0 = [3, 2, 1];
let arr00 = arr0.copyWithin(2, 0);
console.log('arr0:', arr0, 'arr00:', arr00);

//arr0: [3, 2, 3] arr00: [3, 2, 3];

let arr1 = [3, 2, 1];
let arr11 = arr1.copyWithin(2, 1, 2);
console.log('arr1:', arr1, 'arr11:', arr11);

// arr1: [3, 2, 2] arr11: [3, 2, 2];

let arr2 = [3, 2, 1];
let arr22 = arr2.copyWithin(-1, -2, -1);
console.log('arr2', arr2, 'arr22', arr22);

// arr1: [3, 2, 2] arr11: [3, 2, 2];

Array.prototype.fill()

描述 :
将数组的某一区域的全部元素用指定值替换.
语法 :

arr.fill(value[, start[, end]])

value : 填充数组的参数值.
start : 起始索引, 默认值为 0. 如果是负数时, 规则如上.
end : 终止索引, 默认值为 this.length. 不包括end位置. 如果是负数时, 规则如上.
返回值 : 被改动后的原数组.

1
2
3
4
5
6
7
8
9
10
11
let arr0 = [3, 2, 1];
let arr00 = arr0.fill(3);
console.log('arr0:', arr0, 'arr00:', arr00);

// arr0: [3, 3, 3] arr00: [3, 3, 3];

let arr1 = [3, 2, 1];
let arr11 = arr1.fill(3, 1);
console.log('arr1:', arr1, 'arr11:', arr11);

// arr1: [3, 3, 3] arr11: [3, 3, 3]

------------- The End -------------
显示评论