我正在参加「掘金·启航计划」
为什么要总结API?
有些api写了忘,忘了写,哪天你临时笔试了突然忘记一些数据操作咋写了,还不得急死?
怎么总结呢?
我写的文章可能有遗漏,尤其是对于JavaScript这种语言有太多数据处理骚操作了,这时候就要刷题!看题解!总结用法!我是小镇做题家!
很多使用频率较高的API都是指操作数组,操作字符串和遍历等等,还有一些其他数据结构,比如字典(Map)和集合(Set)用于写哈希表、去除余数等题,
字符串篇
字符串骚操作很多,有很多api都会重复或者用JS的特性,已经用空行分类并且注释标明很清楚了
str.length //字符串长度,注意这是属性,并不属于方法
str.trim() //去除首尾部分的所有空格
str.indexOf("指定字符串",num) //检索字符串首个出现指定字符串并返回第一个索引
str.lastIndexOf("指定字符串",num) //检索字符串尾部开始首个出现字符串并返回最后一个索引,与上面差不多
str.search("字符串"/正则) //比起indexOf更加强大的是它可以使用正则表达式
str.include("指定字符串") //有这个字符串就返回true
//num为检索起始位置(计算位置从0开始),如果两者都没有检索到相应字母,则会返回-1
str.charAt(num) //与上方用法相反,根据指定下标返回相应字符,不如直接str[num],废物API
str.slice(start_num,end_num) //裁剪字符串指定位置
str.substring(start_num,end_num) //和上面一样,就是不能取负值,但谁没事取负值呢,废物API
str.substr(start_num,length) //与slice不同的地方在于第二个参数为裁剪长度
str.splice() //裁剪字符串,注意此方法会改变原字符串,笔试要考
str.replace("需要替换的字符串","替换字符串") //替换指定的位置
//注意该用法有很多骚操作,比如以下正则操作
str = "wo shi shabi";
var n = str.replace(/SHABI/i, "shuaibi"); //让字符串对兼容大小写
str = "wo shi shabi,dashabi";
var n = str.replace(/shabi/g, "shuaibi"); //替换该字符串所有的指定字符串
str.ToUpperCase() //所有字符串转化为大写
str.ToLowerCase() //所有字符串转化为小写
str.concat() //连接多个字符串,感觉不如字符串直接相加,没多大用
str.split("指定字符串") //指定字符串作为分割符,把字符串分割为数组,为空时直接分割,这个是真TM好用
//注意split,splice和slice三者区别,别搞混了!!!
${} //内部可以为变量,但是此时字符串引用必须为``
数字篇
这个用的比较少,Math方法想单独搁在一列写,但还是写一下少许操作吧,觉得没用就看后面数组篇
num.toString() //有奇招,你直接加个""照样用:1+""="1"
num.toFixed(num1) //这个num1是保留小数点的个数,平时用不到
Number(x) //这个x可以为任何属性,但是遇到无法转化为数字的直接返回NaN
parseInt(x) //x必须首部为数字,遇到其他符号直接中断并返回数字,如果首部不为数字或者空格直接返回NaN
parseFloat(x) //返回带小数点,与上面差不多,没用过反正
Math方法
前文提到了max和min的两个操作,这里一并说一下基本操作,已经封装好的函数用起来很爽
Math.round(小数) //四舍五入将小数化为整数
Math.ceil(小数) //小数向上取值
Math.floor(小数) //小数向下取值
Math.abs(num) //绝对值
Math.sqrt(num) //平方根
Math.pow(x,y) //x的y次方
Math.PI //圆周率
Math.sin(num) //初中知识
Math.cos(num) //初中知识
Math.random() //您算法题写这个是什么意思?
数组篇
数组使用频率最高,并且API很多,全看你会不会玩骚操作,快给我写呕了
arr=new Array(m) //这不就创建数组吗?行,往下看
arr=new Array(m).fill(num1) //这不就创建数组并且填充吗,继续看
arr = Array(m).fill().map(() => Array(n).fill(num1)) //创建行为m,列为n的二维数组,数组数字填充为num1,你先理解一下
arr = Array.from(new Array(m), () => new Array(n).fill(num1)) //与上方一个样,好好消化
//以下方法为超高频率用法,什么堆栈就指着它模拟了
arr.push(num) //尾部推入一个数字
arr.unshift(num) //首部推入一个数字
arr.pop() //尾部删去一个值并且返回该值
arr.shift() //首部删去一个值并且返回该值
delete arr[x] //删去该值,但是会留下空洞,留下undefiend,没锤子用
arr.splice(start_num,len,[替换值,没有值时则与删除差不多]) //对原数组进行修改,返回值为删去值
arr.concat(arr1,arr2...) //连接数组,返回值为连接数组,原数组没有改动
arr.slice(start_num,len) //从起始位置向后裁剪数组,返回值为裁剪后的数组,原数组没有改动
arr.sort() //依照字母顺序对数组进行排序,注意这不是按照数字大小排序!!!往后面看
arr.sort((a,b)=>b-a) //里面可以为箭头或者普通函数,是对数字大小进行排序,这个可以有很多骚操作,自己发掘
arr.reverse() //反转数组
//为什么要把Math方法放到这,往注释看
Math.max() //比较数字,返回最大值,可以使用扩展运算符展开:Math.max([...arr])
Math.min() //与上面相反
//数组的遍历方法很多很多,这里是个难点,注释写不完,我会在后续文章更新详细用法
arr.forEach()
arr.map()
arr.filter()
arr.some()
arr.every()
arr.indexOf(num) //和字符串一个用法,从头开始检索返回第一个取到的指,无则返回-1
arr.lastIndexOf(num) //这个和上面相反,从后往前检索
arr.find() //es6方法,到时候一并和数组遍历讲
arr.findIndex() //es6方法,到时候一并和数组遍历讲
Set篇
终于总结到这里了,接下来的API很简单,Set和Map的添加方法别混淆就行
set=new Set() //创建Set对象,Set的本质是object
set.add(x) //向集合添加x
set.delete(x) //集合删除x
set.clear() //清空所有元素
set.has(x) //检索集合是否含有x,有则true无则false
set.size //返回集合长度
Map篇
字典和集合的API差不多,唯一区别就是有无key(键值)
set=new Map() //创建Map对象
set.set(key,value) //向字典添加值
set.get(key) //根据key返回value
set.has(key) //是否有该key
set.delete(key) //删除key
set.clear() //清空