簡體   English   中英

使用以數組為鍵的JavaScript Map,為什么不能獲取存儲的值?

[英]Using a JavaScript Map with array as key, why can't I get the stored value?

我的代碼初始化了一個Map對象,並使用數組作為鍵。 當我嘗試使用map.get()方法時,得到的是“未定義”而不是我期望的值。 我想念什么?

const initBoardMap = () => {
  let theBoard = new Map()
  for (let r = 0; r < 3; r++) {
    for (let c = 0; c < 3; c++) {
      //create a Map and set keys for each entry an array [r,c]
      //set the value to a dash
      // ---- commented out the array as key :-(
      //theBoard.set([r, c], '-')
      const mykeyStr = r + ',' + c
      theBoard.set(mykeyStr, '-')
    }
  }
  return theBoard
}

const printBoardMap = theBoard => {
  for (let r = 0; r < 3; r++) {
    let row=''
    for (let c = 0; c < 3; c++) {
      //initialize an array as the map key
      // comment out array as key
      // let mapKey = [r, c]
      //
      //why can't I get the value I expect from the line below?
      //
      //let square = theBoard.get(mapKey)
      //log the value of map.get --- notice its always undefined   
      const mykeyStr = r + ',' + c
      row += theBoard.get(mykeyStr)
       if (c < 2) row += '|'
    }
    console.log(row)
  }
}
let boardMap = initBoardMap()

printBoardMap(boardMap)

當您將非基本類型傳遞給.get ,您需要將.set與對完全相同的對象的引用一起使用。 例如,在設置時,您可以執行以下操作:

  theBoard.set([r, c], '-')

該行運行時將創建一個數組[r, c] 然后,在printBoardMap ,您的

  let mapKey = [r, c]

創建另一個數組[r, c] 它們不是同一陣列; 如果orig是原始數組, mapKey !== orig

您可以考慮設置和獲取字符串,例如'0_2'而不是[0, 2]

theBoard.set(r + '_' + c, '-')

const mapKey = r + '_' + c;

(最好使用const ,而不是let可能的情況下-只使用let當你需要重新分配有問題的變量)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM