Как я могу увидеть содержимое карты JavaScript с помощью отладчика узлов?

Я использую консольный отладчик в NodeJS и хочу посмотреть объект Map. Вот простой тестовый скрипт, на котором я хочу попрактиковаться.

'use strict'

const data = new Map()

const readline = require('readline-sync')
let input
do {
  input = String(readline.question('enter command: ')).trim()
  debugger
  if (input.indexOf('add ') === 0) {
    const space = input.indexOf(' ')
    const item = input.substring(space).trim()
    console.log(`adding '${item}'`)
    let qty = 1
    debugger
    if (data.has(item)) qty = data.get(item) + 1
    data.set(item, qty)
  }
  if (input.indexOf('list') === 0) {
    data.forEach( (val, key) => {
        process.stdout.write(`${key}\t${val}\n`)
    })
  }
} while (input !== 'exit')

Поэтому я запускаю скрипт в режиме отладки и прикрепляю наблюдателя к data объект.

node debug simpleDebug.js
< Debugger listening on 127.0.0.1:5858
connecting to 127.0.0.1:5858 ... ok
break in simpleDebug.js:2
  1 
> 2 'use strict'
  3 
  4 const data = new Map()
debug> watch('data')
debug> c
debug> enter command: add cheese
break in simpleDebug.js:10
Watchers:
  0: data = {"handle":15,"type":"map","text":"#<Map>"}

  8 do {
  9     input = String(readline.question('enter command: ')).trim()
>10     debugger
 11     if (input.indexOf('add ') === 0) {
 12         const space = input.indexOf(' ')
debug>

Как видите, отладчик не показывает значения, хранящиеся на карте. Я предполагаю, что это часть "text" ключ, но как я могу добавить наблюдателя к этому?

1 ответ

Решение

Вы можете использовать оператор распространения, чтобы преобразовать карту в 2D массив значений ключа

watch('[...data]')

Или, если вы хотите посмотреть значение конкретного ключа

watch("data.get('myKey')")

или только ключи

watch('[...data.keys()]')

или только значения

watch('[...data.values()]')

В качестве альтернативы, вы можете рассмотреть возможность использования обычного объекта и наблюдать за этой переменной. Что-то вроде:

var obj = {};
//your code
if(obj[item]){
    obj[item] += 1;
} else {
    obj[item] = 1;
}

а такжеwatch('obj')

Другие вопросы по тегам