今天主要是有关周赛的,比赛的时候是用c++写的并且是
ak了,但是就是想用js再复盘一下,也不能只是图一时之爽,如果是换在实际的场景里面我是不是只会用 c++快速写出来。
最近也要从js逐渐转向ts,感觉Ts才是主旋律,js还是有很多不足的方,在此立个flag,这个星期彻底搞定Ts并且产出一篇较为详细的文章。
主要复盘的点:
js的数组方法,还有多维数组怎么定义比较好。
- 构造函数:
new Array(): 当只有一个参数的时候,就会定义这个长度的一维数组,当有两个或者两个以上,就会把这些参数作为数组的内容。
const arr = new Array()// 空数组
const arr1 = new Array(3) // [undefined, undefined, undefined]
const arr2 = new Array(1, 2, 3) // [1, 2, 3]
-
Array.of():
文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/of
没见过的冷门函数,其实就是把里面的参数都当成是数组的内容。 -
length属性,是个很神奇的属性,之前还不知道改变这个数组本身也会改变,增加了长度就是扩展(从后扩展),反之就是截断(从后截断)。
-
shift(): 删除开头
-
unshift(): 添加东西到开头
-
splice(): 很有用且很有意思的函数,可以增加(插入)或者是删除元素,直接操作数组对象不是一个纯函数,插入元素实际上就是删除0个元素,然后把元素传入,有点意思,这个参数就可以简化了,具体api的使用如下:
- 插入元素:splice(索引, 0, item1, item2, …, item_end),效果就是如果索引是0到length-1就会在前面加上item,如果是length就会是在最末尾加。
*indexof(item),找到item的索引,找到第一个,没找到为-1.
*lastIndexOf(item),找到最后一个,没找到为-1.
-
includes(item),是否包含item。
-
find(callback(x)): 找到第一个满足callback的元素
-
findIndex(callback(x): 跟上面一样,但是是找索引。
-
slice(startIndex, endIndex):截取子段,左闭右开。
-
fill(): 填充,一般用于初始化。
-
高阶数组的定义:
- 首先是直接定义了: [[1, 2, 3], [4, 5]]
- 然后是new Array(x).map().map()链式定义
- 然后我自己写了一个函数用来生成我想要的高维数组:
函数主要是两个参数,第一个是数组的维度,例如传入[3, 2, 3],那么就是生成3 * 2 * 3的三维数组(矩阵) ,第二个是默认值。
/** * create a Array * * @param {Array} shapeList * @param {any} defaultValue * @returns newArray */const createArray = (shapeList, defaultValue = 0) => {let s = 1let res = new Array(shapeList[0]).fill(defaultValue)let tmp = [res] while(s < shapeList.length) {const low = []for(let i = 0; i < tmp.length; ++ i) {for(let j = 0; j < tmp[i].length; ++ j ) {const cur = new Array(shapeList[s]).fill(0)tmp[i][j] = cur low.push(cur) }}tmp = low s ++; }return res }const res = createArray([3, 4, 5]) console.log(res[0][0][0]);
重新回顾为不熟悉的,虽然只是一些api的使用,但是我觉得在开发的时候,这些api应该刻在脑子里面,因为太基本了。