字符串和数组常用方法总结
在 JavaScript 中,字符串和数组的方法特别多,日常也是最长用到的,所以梳理一下,加强记忆。
字符串方法
str.indexOf(substr, pos):从给定位置
pos
开始,在str
中查找substr
,如果没有找到,则返回-1
,否则返回匹配成功的位置。str.lastIndexOf(substr, position):从字符串的末尾开始搜索到开头。
str.includes(substr, pos):根据
str
中是否包含substr
来返回true/false
。str.startsWith(substr):返回
true/false
。str.endsWith(substr):返回
true/false
。str.slice(start [, end]):返回字符串从
start
到(但不包括)end
的部分。- 对原数据 无修改
start/end
可以是负值,表示起始位置从字符串结尾计算
str.substring(start [, end]):返回字符串从
start
到(但不包括)end
的部分。这与slice
几乎相同,但它允许start
大于end
。- 对原数据 无修改
- 不支持负参数,会被视为
0
。
let str = "stringify";
// 这些对于 substring 是相同的
alert( str.substring(2, 6) ); // "ring"
alert( str.substring(6, 2) ); // "ring"
// ……但对 slice 是不同的:
alert( str.slice(2, 6) ); // "ring"(一样)
alert( str.slice(6, 2) ); // ""(空字符串)str.substr(start [, length]):返回字符串从
start
开始的给定length
的部分。- 对原数据 无修改
start
可以是负数,从结尾算起。- 非核心规范内容,而是在附录 B 中
数组方法
arr.at(i)
:返回数组arr
索引index
对应的元素。如果i >= 0
,则与arr[i]
完全相同。i
为负数则从数组的末端向前数。arr.push(item1, item2, ...)
:在末端添加元素item
,returnarr.length
- 对原数据 有修改
arr.pop()
:从末端取出一个元素,return 取出的元素- 对原数据 有修改
arr.shift()
:从首端取出一个元素,return 取出的元素- 对原数据 有修改
arr.unshift(item1, item2, ...)
:在首端添加元素item
,returnarr.length
- 对原数据 有修改
arr.indexOf/lastIndexOf(item, from)
:从索引from
开始搜索item
,如果找到则返回索引,否则返回-1
。arr.includes(item, from)
:从索引from
开始搜索item
,如果找到则返回true
,否则返回false
。- 可以正确识别
NaN
,但indexOf/lastIndexOf
不行
- 可以正确识别
arr.splice(start[, deleteCount, elem1, ..., elemN])
:从索引start
开始修改arr
:删除deleteCount
个元素并在当前位置插入elem1, ..., elemN
。最后返回被删除的元素所组成的数组。- 对原数据 有修改
- 允许负数索引,从数组末尾开始计算位置
arr.slice([start], [end])
:索引start
到end
(不包括end
)的数组项复制到一个新的数组并返回。- 对原数据 无修改
- 两个索引均可为负数,从末尾计算索引。
arr.concat(arg1, arg2...)
:接受任意数量的参数(数组或值都可以),创建一个新数组,其中包含所有参数的值。- 对原数据 无修改
- 通常只复制数组中的元素。其他对象,即使它们看起来像数组一样,但仍然会被作为一个整体添加:
let arr = [1, 2];
let arrayLike = {
0: "something",
length: 1
};
alert( arr.concat(arrayLike) ); // 1,2,[object Object]- 除非类数组对象具有
Symbol.isConcatSpreadable
属性,那么它就会被concat
当作一个数组来处理:
let arr = [1, 2];
let arrayLike = {
0: "something",
1: "else",
[Symbol.isConcatSpreadable]: true,
length: 2
};
alert( arr.concat(arrayLike) ); // 1,2,something,elsearr.forEach((item, index, array) => { ...对 item 进行处理 })
:无返回值arr.find((item, index, array) => {})
:返回true
则停止搜索并返回item
,否则返回undefined
。arr.findIndex/findLastIndex((item, index, array) => {})
:与arr.find
基本相同,但返回找到的元素的index
而不是item
,没找到则返回-1
。let results = arr.filter((item, index, array) => {});
:处理函数中return true
则会将item push
到results
,如果没有符合条件的,则results
为空数组。map((item, index, array) => {})
:返回结果数组arr.sort(func)
:对数组进行原位排序- 对原数据 有修改
arr.reverse()
:颠倒arr
中元素的顺序- 对原数据 有修改
arr.split(delim)
arr.join(glue)
arr.reduce((accumulator, item, index, array) => {}, [initial])
:accumulator
是上一个函数调用的结果,第一次等于initial
(如果提供了initial
)arr.reduceRight
和arr.reduce
方法功能一样,只是遍历从右到左
- 本文链接:https://www.dingxuewen.com/article/string-and-arr-methods/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!