数组属性与方法
属性
| 属性 | 描述 |
|---|---|
| constructor | 返回创建数组对象的原型函数。 |
| length | 设置或返回数组元素的个数。 |
| prototype | 允许你向数组对象添加属性或方法。 |
方法
concat(array2,array3,...,arrayX)
拼接多个数组
是否改变原数组:否
返回值: 新数组
| 属性 | 描述 |
|---|---|
| array2, array3, ..., arrayX | 必需。该参数可以是具体的值,也可以是数组对象。可以是任意多个。 |
var arr = [1,2]
console.log(arr.concat([3,4],[5,6],[7,8])) // [ 1, 2, 3, 4, 5, 6, 7, 8 ]
console.log(arr) //[ 1, 2 ]
var arr = [1,2]
console.log(arr.concat(3,4)) // [ 1, 2, 3, 4 ]
console.log(arr) // [ 1, 2 ]
copyWithin(target, start, end)
用于从数组的指定位置拷贝元素到数组的另一个指定位置中。IE 11 及更早版本不支持 copyWithin() 方法。(ECMAScript 6)
是否改变原数组:是
返回值:原数组
| 属性 | 描述 |
|---|---|
| target | 必需。复制到指定目标索引位置。 |
| start | 可选。元素复制的起始位置。默认0 |
| end | 可选。停止复制的索引位置 (默认为 array.length)。如果为负值,表示倒数。 |
// 把[2,3]复制到[4,5]的位置
var arr = [1,2,3,4,5,6,7,8,9]
console.log(arr.copyWithin(3,1,3)) // [ 1, 2, 3, 2, 3, 6, 7, 8, 9 ]
console.log(arr) // [ 1, 2, 3, 2, 3, 6, 7, 8, 9 ]
// 不会超出原始长度
var arr = [1,2,3,4,5,6,7,8,9]
console.log(arr.copyWithin(3)) // [ 1, 2, 3, 1, 2, 3, 4, 5, 6 ]
console.log(arr) // [ 1, 2, 3, 1, 2, 3, 4, 5, 6 ]
var arr = [1,2,3,4,5,6,7,8,9]
console.log(arr.copyWithin(3, -3, -1)) // [ 1, 2, 3, 7, 8, 6, 7, 8, 9 ]
console.log(arr) // [ 1, 2, 3, 7, 8, 6, 7, 8, 9 ]
entries
对键值对的遍历。 (ECMAScript 6)
是否改变原数组:否
返回值:遍历器对象
var arr = ['a','b']
for (let item of arr.entries()) {
console.log(item) // [ 0, 'a' ] // [ 1, 'b' ]
}
console.log(arr) // [ 'a', 'b' ]
keys
对键名的遍历。 (ECMAScript 6)
是否改变原数组:否
返回值:遍历器对象
var arr = ['a','b']
for (let item of arr.keys()) {
console.log(item) // 其实就是对应的数组索引值
}
console.log(arr)
values
对键值的遍历。 (ECMAScript 6) (node v8.9.0不支持,12.19.0支持,中间版本未测)
是否改变原数组:否
返回值:遍历器对象
var arr = ['a','b']
for (let item of arr.values()) {
console.log(item) // 其实就是对应的数组元素值
}
console.log(arr)
every
用于检测数组所有元素是否都符合指定条件。当遍历到不符合条件的元素后不再继续遍历后面的元素(类似循环中的break)。空数组返回true
是否改变原数组:否
返回值:Boolean
参数:
第一个必填,是一个函数,数组中的每个元素都会执行这个函数,函数的返回值也为Boolean;
第二个thisValue,可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。 如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
函数的参数:
| 参数 | 描述 |
|---|---|
| currentValue | 必须。当前元素的值 |
| index | 可选。当前元素的索引值 |
| arr | 可选。数组对象本身 |
var arr = [1,2,3]
console.log(arr.every(check))
function check(val, index, arr) {
// return val > 0 // true
return val > 1 // false
}
some
用于检测数组是否存在元素符合指定条件。当遍历到符合条件的元素后不再继续遍历后面的元素(类似循环中的break)。空数组返回false
是否改变原数组:否
返回值:Boolean
参数:
第一个必填,是一个函数,数组中的每个元素都会执行这个函数,函数的返回值也为Boolean;
第二个thisValue,可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。 如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
函数的参数:
| 参数 | 描述 |
|---|---|
| currentValue | 必须。当前元素的值 |
| index | 可选。当前元素的索引值 |
| arr | 可选。数组对象本身 |
var arr = [2,-1,3]
console.log(arr.some(check))
function check(val, index, arr) {
return val < 0 // true
// return val > 5 // false
}
// some第二个参数具体有啥用?
var arr = [2,-1,3]
console.log(arr.some(check, [4,5,6]))
function check(val, index, arr) {
console.log(this) // [ 4, 5, 6 ]
console.log(val)
return val < 0
// return val > 5
}
map
返回一个新数组,新数组元素为原数组元素逐个依次调用回调函数后返回的值。空数组返回空数组
是否改变原数组:否
返回值:新数组
参数:
第一个必填,是一个函数,数组中的每个元素都会执行这个函数,函数需返回一个值,否则新数组中的元素均为undefined;
第二个thisValue,可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。 如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
函数的参数:
| 参数 | 描述 |
|---|---|
| currentValue | 必须。当前元素的值 |
| index | 可选。当前元素的索引值 |
| arr | 可选。数组对象本身 |
var arr = [1,2,3]
console.log(arr.map(check)) // [ 2, 3, 4 ]
function check(val ,index, arr) {
return val+1
}
filter
返回一个新数组,新数组元素为原数组元素符合条件的元素。空数组返回空数组
是否改变原数组:否
返回值:新数组
参数:
第一个必填,是一个函数,数组中的每个元素都会执行这个函数,函数需返回Boolean,返回true的对应的元素加入新数组;
第二个thisValue,可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。 如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
函数的参数:
| 参数 | 描述 |
|---|---|
| currentValue | 必须。当前元素的值 |
| index | 可选。当前元素的索引值 |
| arr | 可选。数组对象本身 |
var arr = [1,2,3]
console.log(arr.filter(check)) // [ 2, 3 ]
function check(val ,index, arr) {
return val>1
}
reduce
接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。数组不能为空
是否改变原数组:否
返回值:一个值
参数:
第一个必填,是一个函数,计算上一次计算的返回值(或初始值)与当前值的关系,返回计算的结果
第二个initialValue,可选。传递给函数的初始值。为空时,数组的第一项作为total的初始值?
函数的参数:
| 参数 | 描述 |
|---|---|
| total | 必需。初始值, 或者计算结束后的返回值。 |
| currentValue | 必须。当前元素的值 |
| index | 可选。当前元素的索引值 |
| arr | 可选。数组对象本身 |
var arr = [1,2,3]
console.log(arr.reduce((total, cur, index, arr) => {
return total-cur
})) // -4
reduceRight
与reduce类似,区别是 reduceRight() 从数组的末尾向前将数组中的数组项做累加
var arr = [1,2,3]
console.log(arr.reduceRight((total, cur, index, arr) => {
return total-cur
})) // 0
forEach
用于调用数组的每个元素,并将元素传递给回调函数。
是否改变原数组:否
返回值:undefined
参数:
第一个必填,是一个函数
第二个thisValue,可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。 如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
函数的参数:
| 参数 | 描述 |
|---|---|
| currentValue | 必须。当前元素的值 |
| index | 可选。当前元素的索引值 |
| arr | 可选。数组对象本身 |
var arr = [1,2,3]
arr.forEach(check)
function check(val ,index, arr) {
console.log(val)
}
find
返回符合条件的第一个元素
是否改变原数组:否
返回值:
参数:
第一个必填,是一个函数,返回值为Boolean
第二个thisValue,可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。 如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
函数的参数:
| 参数 | 描述 |
|---|---|
| currentValue | 必须。当前元素的值 |
| index | 可选。当前元素的索引值 |
| arr | 可选。数组对象本身 |
var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits.find(findOrange)); // Orange
function findOrange(cur, index, arr) {
return cur == 'Orange'
}
findIndex返回值为元素的索引
同find,区别是findIndex返回值为元素的索引
pop
用于删除数组的最后一个元素,并返回删除的元素。改变原数组
push
向数组的末尾添加一个或多个元素,并返回新的长度。改变原数组
shift
把数组的第一个元素从其中删除,并返回第一个元素的值。改变原数组
unshift
向数组的开头添加一个或多个元素,并返回新的长度。改变原数组
fill(value, start, end)
将一个固定值替换数组的元素。(ECMAScript 6)
是否改变原数组:是
返回值:原数组
| 属性 | 描述 |
|---|---|
| value | 必需。填充的值。 |
| start | 可选。开始填充位置。默认0。可为负数 |
| end | 可选。停止填充位置 (默认为 array.length)。可为负数 |
flat
将嵌套数组拉平。
是否改变原数组:否
返回值:新数组
参数:空/Number/Infinity
var arr = [1,2,3, [5,6,7]]
console.log(arr.flat()) // [ 1, 2, 3, 5, 6, 7 ]
console.log(arr) // [ 1, 2, 3, [ 5, 6, 7 ] ]
flatMap
相当于先执行map方法再执行一次flat,但此时flat只能展开一层嵌套
是否改变原数组:否
返回值:新数组
参数:
第一个必填,是一个函数,返回值为Boolean
第二个thisValue,可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。 如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
函数的参数:
| 参数 | 描述 |
|---|---|
| currentValue | 必须。当前元素的值 |
| index | 可选。当前元素的索引值 |
| arr | 可选。数组对象本身 |
var arr = [1,2,3]
console.log(arr.flatMap(n => [n * 2])) // [ 2, 4, 6 ]
console.log(arr)
var arr = [1,2,3]
console.log(arr.flatMap((x) => [[x, x * 2]])) // [ [ 1, 2 ], [ 2, 4 ], [ 3, 6 ]]
console.log(arr) // [1,2,3]
includes
用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false。
是否改变原数组:否
返回值:Boolean
| 参数 | 描述 |
|---|---|
| searchElement | 必须。需要查找的元素值。 |
| index | 可选。当前元素的索引值 |
indexOf
返回数组中某个指定的元素位置
是否改变原数组:否
返回值:Number
| 参数 | 描述 |
|---|---|
| searchElement | 必须。需要查找的元素值。 |
| start | 可选。规定在数组中开始检索的位置。 |
lastIndexOf
返回一个指定的字符串值最后出现的位置。如果指定第二个参数 start,则在一个字符串中的指定位置从后向前搜索。
是否改变原数组:否
返回值:Number
| 参数 | 描述 |
|---|---|
| searchElement | 必须。需要查找的元素值。 |
| start | 可选。规定在数组中开始检索的位置。 |
join
把数组中的所有元素转换一个字符串。 元素是通过指定的分隔符进行分隔的。
是否改变原数组:否
返回值:String
| 参数 | 描述 |
|---|---|
| separator | 可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分隔符。 |
reverse
用于颠倒数组中元素的顺序。
是否改变原数组:是
返回值:Array
var arr = [1,2,3]
console.log(arr.reverse()) // [ 3, 2, 1 ]
console.log(arr) // [ 3, 2, 1 ]
sort
对数组的元素进行排序。默认排序顺序为按字母升序。
是否改变原数组:是
返回值:Array
| 参数 | 描述 |
|---|---|
| sortfunction | 可选。规定排序顺序。必须是函数。 |
var arr = [1,2,3, 10]
console.log(arr.sort((a, b) => a-b)) // [ 1, 2, 3, 10 ]
console.log(arr) // [ 1, 2, 3, 10 ]
slice
从已有的数组中返回选定的元素。
是否改变原数组:否
返回值:Array
| 参数 | 描述 |
|---|---|
| start | 可选。选取的起始点。如果是负数则从数组尾部开始计算。默认0 |
| end | 可选。选取的结束点。如果是负数则从数组尾部开始计算。默认最后一个元素 |
var arr = [1,2,3, 10]
console.log(arr.slice(1,2)) // [ 2 ]
console.log(arr) // [1,2,3, 10]
splice
用于添加或删除数组中的元素。
是否改变原数组:是
返回值:数组,返回被删除的元素
| 参数 | 描述 |
|---|---|
| index | 该参数是开始插入和(或)删除的数组元素的下标 |
| howmany | 可选。规定应该删除多少元素。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。 |
| item1, ..., itemX | 可选。要添加到数组的新元素 |
var arr = [1,2,3, 10]
console.log(arr.splice(1,2,[3,4,5])) // [ 2, 3 ]
console.log(arr) // [ 1, [ 3, 4, 5 ], 10 ]