var myArray = ['hi', 2020]; //支持多种类型的变量混入

var myArray = [1, ['hi', 2020]]; [//Multi-dimensional](//multi-dimensional) 多维

[1, 2, 3].push(['hi', 2020]) //在尾部添加

[1, 2, 3].unshift(['hi', 2020]) //在首部添加

[1, 2, 3].pop() //删除尾部值,并返回删除的值

[1, 2, 3].shift() //删除首个值,并返回删除的值

//splice 拼接 胶接处
.splice(index, offset) //得到子数组,根据下标和偏移量
[1, 2, 3, 4].splice(1,1)//[2]

//复制数组
[1,2,3].slice()
copy= [...[1,2,3]]

直接改变源数组值的method

**Array.prototype.copyWithin()**

在数组内部,将一段元素序列拷贝到另一段元素序列上,覆盖原有的值。

**.fill()**

将数组中指定区间的所有元素的值,都替换成某个固定的值。

.pop()

删除数组的最后一个元素,并返回这个元素。

.push()

在数组的末尾增加一个或多个元素,并返回数组的新长度。

.reverse()

颠倒数组中元素的排列顺序,即原先的第一个变为最后一个,原先的最后一个变为第一个。

.shift()

删除数组的第一个元素,并返回这个元素。

.sort()

对数组元素进行排序,并返回当前数组。

默认转换为字符串再排序(unicode 里,'80' 比 '9' 靠前,所以数字排序要提供回调函数用来比较)

数字从小到大排序
[2,5,4].sort((a,b⇒ a-b)//根据回调函数返回值的正负来排序

从大到小
[2,5,4].sort((a,b⇒ b-a)

.splice()

在任意的位置给数组添加或删除任意个元素

删除的元素会放在一个数组中返回

splice 拼接
.splice(index, 数量)//删除,数量要算上index 的那个
var a = [1,2,3,4,5]
var b = a.splice(0,3)
a //[4,5]
b //[1,2,3]

.splice(index, 数量, ...[])//被删除的地方可以替换为新的值
a.splice(0,3,...[4,4,4,4,4])
a.splice(0,3,4,4,4,4,4)

//任意位置删除0个元素并添加n个元素
function frankenSplice(arr1, arr2, n) {
  arr2.splice(n,0,...arr1)
  return arr2;
}
frankenSplice([1, 2, 3], [4, 5, 6], 1);

.unshift()

在数组的开头增加一个或多个元素,并返回数组的新长度。

不改变源数组值,返回新数组或其它数据的方法

.concat()

返回一个由当前数组和其它若干个数组或者若干个非数组值组合而成的新数组。

**.includes()**

判断当前数组是否包含某指定的值,如果是返回 true,否则返回 false

.join()

连接所有数组元素组成一个字符串。

.slice()

抽取当前数组中的一段元素组合成一个新数组。(slice 部分 切开)

.slice(index-begin, index-end)//包含begin, 不包含end
[1,2,3,4,5].slice(1,2)//[2]
[1,2,3,4,5].slice(1,1)//[]
[1,2,3,4,5].slice(1,3)//[2, 3],不包括下标为3 的元素
[1,2,3,4,5].slice(1,100)//大于数组的长度,提取到原数组末尾

//默认参数(0, arr.length)
[1,2,3].slice()//[1,2,3] 复制数组,在需要不改变原数组的时候

**.toSource()**

返回一个表示当前数组字面量的字符串。遮蔽了原型链上的 Object.prototype.toSource() 方法。

.toString()

返回一个由所有数组元素组合而成的字符串。遮蔽了原型链上的 Object.prototype.toString() 方法。

.toLocaleString()

返回一个由所有数组元素组合而成的本地化后的字符串。遮蔽了原型链上的 Object.prototype.toLocaleString() 方法。

.indexOf()

返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。

根据元素内容返回其index

.lastIndexOf()

返回数组中最后一个(从右边数第一个)与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。

迭代、过滤、组合

every() forEach() map() 多种迭代方式,多种结果。但最灵活的还是for

.forEach()

为数组中的每个元素执行一次回调函数。

**.entries()**

返回一个数组迭代器对象,该迭代器会包含所有数组元素的键值对。

.every()

如果数组中的每个元素都满足测试函数,则返回 true,否则返回 false。

.some()

如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false。

遇到一个就立刻终止,然后返回true

.filter()

将所有在过滤函数中返回 true 的数组元素放进一个新数组中并返回。

**.find()**

找到第一个满足测试函数的元素并返回那个元素的值,如果找不到,则返回 undefined

**.findIndex()**

找到第一个满足测试函数的元素并返回那个元素的索引,如果找不到,则返回 -1

[1,2,3].findIndex(num=> num==2)//1, 数字2的下标是1

**.keys()**

返回一个数组迭代器对象,该迭代器会包含所有数组元素的键。

.map()

返回一个由回调函数的返回值组成的新数组。

//map 对每个元素都会返回
[2, 8, 18, 32].map(x=> x>2)//[false, true, true, true]

.reduce()

US: [rɪ'dus] 减少 蒸发 减轻体重 简化

从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。

[1,2,3,4,5].reduce((a,b) => {return c})
//第一次执行时参数是 1,2
//第二次 c,3
//第三次 c,4

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

没有初始值,那么累加器取index 0,参与值取index 1
没有初始值,数组为空,TypeError
有初始值,那么累加器取初始值,参与值取index 0
有初始值,数组为空,不执行callback
	结论:给予初始值,程序更健壮
''.split(' ').reduce((a,b)=>a>b.length?a:b.length)//''
''.split(' ').reduce((a,b)=>a>b.length?a:b.length, 0)//0
	''.split(' ')//[""] 数组中是有一个字符串值的
[].reduce(( acc, cur ) => Math.max( acc.x, cur.x ))//Uncaught TypeError

.reduceRight()

从右到左为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最后一次回调函数的返回值。

**.values()**

返回一个数组迭代器对象,该迭代器会包含所有数组元素的值。

**Array.prototype[@@iterator]()**

和上面的 values() 方法是同一个函数。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array