1.数组首尾添加/移除数组元素:
arr.push(...items)
—— 从尾端添加元素
arr.pop()
—— 从尾端提取元素
arr.shift()
—— 从首端提取元素
arr.unshift(...items)
—— 从首端添加元素
arr.splice(start[, deleteCount, elem1, ..., elemN]) ——可以实现添加,删除,修改数组
它从索引 start
开始修改 arr
:删除 deleteCount
个元素并在当前位置插入 elem1, ..., elemN
。最后返回已被删除元素的数组
将 deleteCount
设置为 0
,splice
方法就能够插入元素而不用删除任何元素,负向索引都是被允许的。它们从数组末尾计算位置
arr.slice([start], [end]) ——它会返回一个新数组,将所有从索引 start
到 end
(不包括 end
)的数组项复制到一个新的数组。start
和 end
都可以是负数,在这种情况下,从末尾计算索引
arr.concat(arg1, arg2...) —— arr.concat 创建一个新数组,其中包含来自于其他数组和其他项的值,如果参数 argN
是一个数组,那么其中的所有元素都会被复制。否则,将复制参数本身。
arr.indexOf(item, from)
从索引from
开始搜索item
,如果找到则返回索引,否则返回-1
。arr.lastIndexOf(item, from)
—— 和上面相同,只是从右向左搜索。arr.includes(item, from)
—— 从索引from
开始搜索item
,如果找到则返回true
(译注:如果没找到,则返回false
)。
arr.forEach(function(item, index, array) { // ... do something with item });
arr.forEach 方法允许为数组的每个元素都运行一个函数。
let result = arr.find(function(item, index, array) { // 如果返回 true,则返回 item 并停止迭代 // 对于假值(falsy)的情况,则返回 undefined });
arr.findIndex 方法(与 arr.find
方法)基本上是一样的,但它返回找到元素的索引,而不是元素本身。并且在未找到任何内容时返回 -1
let results = arr.filter(function(item, index, array) { // 如果 true item 被 push 到 results,迭代继续 // 如果什么都没找到,则返回空数组 });
与 find
大致相同,但是 filter
返回的是所有匹配元素组成的数组
let result = arr.map(function(item, index, array) { // 返回新值而不是当前元素 })
arr.sort 方法对数组进行 原位(in-place) 排序,更改元素的顺序。(译注:原位是指在此数组内,而非生成一个新数组。)
实现排序
arr.sort(function(a, b) { return a - b; });
str.split(delim) 它通过给定的分隔符 delim
将字符串分割成一个数组
let names = 'Bilbo, Gandalf, Nazgul'; let arr = names.split(', '); for (let name of arr) { alert( `A message to ${name}.` ); // A message to Bilbo(和其他名字) }split
方法有一个可选的第二个数字参数 —— 对数组长度的限制。如果提供了,那么额外的元素会被忽略。
arr.join(glue)与 split
相反。它会在它们之间创建一串由 glue
粘合的 arr
项。
let arr = ['Bilbo', 'Gandalf', 'Nazgul']; let str = arr.join(';'); // 使用分号 ; 将数组粘合成字符串 alert( str ); // Bilbo;Gandalf;Nazgul
arr.reduce 方法和 arr.reduceRight 方法和上面的种类差不多,但稍微复杂一点。它们用于根据数组计算单个值
let value = arr.reduce(function(accumulator, item, index, array) { // ... }, [initial]);
accumulator
—— 是上一个函数调用的结果,第一次等于initial
(如果提供了initial
的话)。item
—— 当前的数组元素。index
—— 当前索引。arr
—— 数组本身。- arr.reduceRight 和 arr.reduce 方法的功能一样,只是遍历为从右到左
Array.isArray(value)如果 value
是一个数组,则返回 true
;否则返回 false
总结:
-
添加/删除元素:
push(...items)
—— 向尾端添加元素,pop()
—— 从尾端提取一个元素,shift()
—— 从首端提取一个元素,unshift(...items)
—— 向首端添加元素,splice(pos, deleteCount, ...items)
—— 从pos
开始删除deleteCount
个元素,并插入items
。slice(start, end)
—— 创建一个新数组,将从索引start
到索引end
(但不包括end
)的元素复制进去。concat(...items)
—— 返回一个新数组:复制当前数组的所有元素,并向其中添加items
。如果items
中的任意一项是一个数组,那么就取其元素。
-
搜索元素:
indexOf/lastIndexOf(item, pos)
—— 从索引pos
开始搜索item
,搜索到则返回该项的索引,否则返回-1
。includes(value)
—— 如果数组有value
,则返回true
,否则返回false
。find/filter(func)
—— 通过func
过滤元素,返回使func
返回true
的第一个值/所有值。findIndex
和find
类似,但返回索引而不是值。
-
遍历元素:
forEach(func)
—— 对每个元素都调用func
,不返回任何内容。
-
转换数组:
map(func)
—— 根据对每个元素调用func
的结果创建一个新数组。sort(func)
—— 对数组进行原位(in-place)排序,然后返回它。reverse()
—— 原位(in-place)反转数组,然后返回它。split/join
—— 将字符串转换为数组并返回。reduce/reduceRight(func, initial)
—— 通过对每个元素调用func
计算数组上的单个值,并在调用之间传递中间结果。
-
其他:
Array.isArray(arr)
检查arr
是否是一个数组。