今天主要是有關周賽的,比賽的時候是用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應該刻在腦子里面,因為太基本了。