数组

数组

数组是最简单的内存数据结构

创建和初始化数组

1
2
3
var arr = [];
var arr = new Array(2);
var arr = Array(2);

添加元素

1
arr[index] = 1;

push方法

把元素添加到数组末尾

1
2
arr.push(1);
arr.push(2,3);

unshift方法

数组首位插入元素

1
2
arr.unshift(-1);
arr.unshift(-2,-3);

pop方法

从末尾删除元素,并返回该元素

1
arr.pop();

shift方法

从首位删除元素,并返回该元素

1
arr.shift();

splice方法

在数组任意位置删除,添加元素

1
2
3
arr.splice(1,2);//索引1开始,删除2个元素,并返回删除的元素
arr.splice(1,0,1,2,3,4);//从索引1开始,删除0个元素,插入1,2,3,4。返回空数组
arr.splice(1,4,1,2,3,4);//从索引1开始,删除4个元素,插入1,2,3,4。返回[1,2,3,4]

其他方法

WX20190717-232701@2x

WX20190718-130142@2x

every方法是在回调的返回值,有一项为false,立刻终止循环,返回false。

some方法是在回调的返回值,有一项为true,立即终止循环,返回true。

from 根据已有的数组创建一个新的数组,也可以将具有iterator接口的数据转换为数组

1
2
3
4
5
6
var arr = [1,2,3];
var arr1 = Array.from(arr,item=>item>1);//[false,true,true]
var arr2 = Array.from(arr);//[1,2,3]

var str = '123';
Array.from(str);//["1","2","3"]

of 根据传入参数创建一个新数组

1
2
3
4
5
6
var arr = [1,2,3];
var arr2 = Array.of(...arr);// [1, 2, 3]

var arr = Array.of(1,2,3);
//等价于
var arr = [1,2,3];

fill 静态值填充数组

1
2
3
4
var arr = [1,2,3,4,5];
arr.fill(0)//[0,0,0,0,0];
arr.fill(1,2);// [0, 0, 1, 1, 1] 从2下标开始填充数值1
arr.fill(2,2,3);// [0, 0, 2, 1, 1] 从2下标开始填充数值2,到下标3为止(不包括下标3)

copyWithin 复制数组中元素到同一数组起始位置

1
2
3
var arr = [1,2,3,4,5,6];
arr.copyWithin(1,3)//从下标3开始复制到下标1开始的地方 [1, 4, 5, 6, 5, 6]
arr.copyWithin(1,3,4)// 从下标3开始到4位置的复制到下标1开始的地方 [1, 6, 5, 6, 5, 6]

reverce 反序

1
arr.reverce();

sort 把元素默认为字符串排序,比较的是ASCII码

1
2
3
4
5
6
var arr = ['b','a',3,2];
arr.sort()//[2, 3, "a", "b"]

//要比较数字而非字符串,比较函数可以简单的以 a 减 b,会按照传入的函数结果排序
var arr = [2,3,1,5,4,6];
arr.sort((a,b)=>b-a);//

indexOf 返回参数匹配的第一个元素的索引

lastIndexOf 返回参数匹配的最后一个元素的索引

find 接收一个回调,返回第一个满足条件的值

1
2
var arr = [3,4,5,6,7,2,1,3];
arr.find(item=>item == 2)//2

findIndex 接收一个回调,返回第一个满足条件的值的下标

1
2
var arr = [3,4,5,6,7,2,1,3];
arr.findIndex(item=>item == 2)//5

includes 数组是否包含某元素

1
2
3
var arr = [2,6,2,5,6,72,4,5];
arr.includes(6);//true
arr.includes(6,5);//true 索引5之后不存在元素6

toString 数组中所有元素输出成一个字符串

1
2
var arr = [{a:1},2,'string',true,null,undefined]
arr.toString();// "[object Object],2,string,true,,"

join

1
2
var arr = [1,2,3,4,5,6];
arr.join('->');//"1->2->3->4->5->6"

entries 返回包含键值对的迭代器

1
2
3
4
5
6
7
var arr = [4,2,1,8,12];
var entries = arr.entries();
entries.next().value;//[0, 4]
entries.next().value;//[1, 2]
entries.next().value;//[2, 1]
entries.next().value;//[3, 8]
entries.next().value;//[4, 12]

keys 返回包含数组索引的迭代器

1
2
3
4
5
6
7
var arr = [4,2,1,8,12];
var entries = arr.keys();
console.log(entries.next().value);//0
console.log(entries.next().value);//1
console.log(entries.next().value);//2
console.log(entries.next().value);//3
console.log(entries.next().value);//4

values 返回包含数组键值的迭代器

1
2
3
4
5
6
7
var arr = [4,2,1,8,12];
var entries = arr.values();
console.log(entries.next().value);//4
console.log(entries.next().value);//2
console.log(entries.next().value);//1
console.log(entries.next().value);//8
console.log(entries.next().value);//12