# JavaScript
# 数组方法
# 静态方法
- Array.of() 用参数中的值创建数组
- Array.of(1,2,3,4) 得到的 [1,2,3,4]
- Array.from(object, mapFunction, thisValue) 将类数组对象转成数组
- Array.from({length:5},(_,index)=>index)) [0, 1, 2, 3, 4]
- Array.isArray() 判断是否是一个对象
# 迭代器方法
- arr.forEach((item,index)=>{console.log(item,index)})
- arr.map() 映射返回一个新数组
- arr.filter() 过滤器,返回符合条件的数组
- arr.find() 返回元素
- arr.findIndex() 返回特定数组元素的下标
- arr.every() 数组所有元素都满足条件则返回true(惰性)
- arr.some() 数组存在一个元素满足条件(惰性)
- arr.reduce() 归并方法
- arr.reduce((pre,cur)=>pre+cur,0) pre代表上一次结果, cur表示当前数组元素,0代表初始结果。
# 打平方法
- arr.flat() 打平数组,arr.flat(num), num代表打平层数
- arr.flatMap() 先映射数组再进行打平, arr.flatMap(callback)=a.map(f).flat(),[-2,-1,1,2].flatMap(x=>x<0?[]:Math.sqrt(x))
# 连接数组
- a.concat(b) 连接 [1,2].concat(4,5) [1, 2, 4, 5]
# 栈,队列操作数组(改变原数组)
- arr.push() 加最后一个元素
- arr.pop() 移除最后一个元素
- arr.shift() 移除第一个元素
- arr.unshift() 加第一个元素
# 处理区域
- arr.slice(start,end) 取出[start,end)元素
- arr.splice(start,num,insertA,insertB) 从start位置开始,删除num个元素,在插入insertA,insertB。
- a.fill(ele,start,end) 用元素ele去填充[start,end)区域的值,new Array(5).fill(1) [1,1,1,1,1]
# 数组索引和排序方法
- arr.indexOf(a) 元素在数组当中的索引(从前往后数)
- arr.lastIndexOf(a) 元素在数组当中的索引 (从后往前数)
- arr.includes(a) 数组内是否存在当前元素
- arr.sort() 数组排序(改变原数组) arr.sort((a,b)=>a-b) 从小到大排序
- arr.reverse() 翻转数组(改变原数组)
- arr.join() 将数组转换成字符串(默认以 , 进行分隔)
改变原数组的方法
- push()
- pop()
- shift()
- unshift()
- splice()
- sort()
- reverse()
# 字符串
# 和数组一样的方法 (数组和字符串都有length属性)
- s1.concat(s2)
- s1.indexOf('a') | s1.indexOf('hello world') 没有返回-1
- s1.lastIndexOf('a') | s1.lastIndexOf('hello world')
- s1.includes('hello')
- s1.slice(start,end) [start,end) 下标 和substring用法一样,不过slice支持-1,substring不支持
# 匹配
- s1.substring(start,end) [start,end) 下标
- s1.substr(start,num) 从下标start开始,返回num个字符
- s1.charAt(2) 返回下标为2的字符
- s1.match(regexp) 返回存放结果的数组[]或者null
- s1.search(searchvalue) 返回searchvalue起始位置
- s1.replace(searchvalue,newvalue) 用newvalue替换searchvalue,只替换一次,返回替换之后的结果
- s1.replaceAll(searchvalue,newvalue) 用newvalue替换searchvalue,替换多次,返回替换之后的结果
- s1.startsWith(searchvalue, ?start) 检测s1是否是以searchvalue开头,从start位置开始检测
# 其他
- s1.split("-") 将字符串转成数组
- s1.repeat(num) 将s1重复num次
# 工具
- s1.toLowerCase() 转小写
- s1.toUpperCase() 转大写
- s1.trim() 去除两边空白
- valueOf()
- toString()
# 数组扁平化
最简单的
function flatArr(arr){
return arr.flat(Infinity)
}
// 利用 concat 进行递归
function flatArr(arr){
let result = []
for (let i = 0; i < arr.length; i++) {
result = Array.isArray(arr[i]) ? result.concat(flatArr(arr[i])) : result.concat(arr[i])
}
return result
}
// 利用 扩展运算符 ...
function flatArr(arr){
for (let i = 0; i < arr.length; i++) {
if(Array.isArray(arr[i])){
arr = [].concat(...arr)
}
}
return arr
}
// 利用 flat
function flatArr(arr){
for (let i = 0; i < arr.length; i++) {
if(Array.isArray(arr[i])){
arr = arr.flat(1) // 与 ... 相比就是改成 flat 了
}
}
return arr
}
function flatArr(arr){
while(arr.some(item=>Array.isArray(item))){ // 更加简洁
arr = arr.flat()
}
return arr
}
// 利用reduce
function flatArr(arr){
return arr.reduce((pre,cur)=>
pre.concat(Array.isArray(cur)? flatArr(cur):cur)
,[])
}
# 数组去重
// 利用set
function unique(arr){
return Array.from(new Set(arr))
}
// 利用splice
function unique(arr){
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if(arr[i] === arr[j]){
arr.splice(i,1)
j--
}
}
}
return arr
}
// filter
function unique(arr){
return arr.filter((item,index)=>{
return arr.indexOf(item) === index
})
}
// 利用indexOf 或者 includes ,开辟一个新数组
function unique(arr){
let res = []
for (let item of arr) {
if(!res.includes(item)){ // if(res.indexOf(item) === -1)
res.push(item)
}
}
return res
}
// sort
function unique(arr) {
arr = arr.sort()
var arrry= [arr[0]];
for (var i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i-1]) {
arrry.push(arr[i]);
}
}
return arrry;
}
[https://www.bookstack.cn/read/es6-3rd/spilt.4.docs-class-extends.md](阮一峰 ECMAScript 6 (ES6) 标准入门教程 第三版)