微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript 调试问答:我如何`console.log()` 映射?

如何解决JavaScript 调试问答:我如何`console.log()` 映射?

有人告诉我,我有一个 Map 比 JS Array [] 更好用。
现在,我正在调试一些正在解析的数据。

const Csv2Map_Promise = (async (csvFilepath) => {
  return new Promise((resolve) => {
    const csvData = new Map();
    createReadStream(csvFilepath)
      .pipe(parse({ delimiter: ',' }))
      .on('data',(csvRow) => { csvData.set(csvRow[0],{ 'value 1': 1,'value 2': 2,'value 3': 3,'value 4': 4 }); })
      .on('end',() => { resolve(csvData); });
  });
})

const csvFile1_Map = Csv2Map_Promise('csvFile1.csv');

csvFile1_Map.then(()=>{console.log(csvFile1_Map);})

我正在调试的文件非常大。
我如何才能console.log获取部分数据?
(检查 10 或 100 次退货)

附言我知道我可以转换回数组,
但是有更好的方法吗?还是我在自欺欺人?

解决方法

由于 Map 实例是一个迭代器,您可以循环遍历它并跟踪要打印的项目数:

let myMap = new Map();

for (let i = 1; i < 10; i++) {
  myMap.set(i,i * 10);
}

console.log("Full list of contacts:")
for (let [key,value] of myMap) {
  console.log(key + ' = ' + value)
};

console.log("3 items of contacts:")
let limit = 3
for (let [key,value] of myMap) {
  if (limit <= 0) {
    break
  }

  console.log(key + ' = ' + value)

  limit--
}

更糟糕的想法是简化代码,但将其转换为数组。为什么更糟?因为你需要将整个数组加载到内存中(去掉迭代器的优势),然后才取出一部分:

let myMap = new Map();

for (let i = 1; i < 10; i++) {
  myMap.set(i,i * 10);
}

console.log("Full list of contacts:");
for (let [key,value] of myMap) {
  console.log(key + " = " + value);
}

console.log("3 items of contacts:");
for (let [key,value] of Array.from(myMap.entries()).slice(0,3)) {
  console.log(key + " = " + value);
}

就您的代码而言,这种遍历地图的循环将发生在 .then 块内:

const makeMapPromise = (size) =>
  new Promise((resolve) => {
    let myMap = new Map();

    // I am creating a map of numbers as I cannot replicate your code
    // but it does not matter. What metters is that this code
    // populates the map somehow with some values
    for (let i = 1; i < size; i++) {
      myMap.set(i,i * 10);
    }

    resolve(myMap);
  });

const myMapPromise = makeMapPromise(10);

myMapPromise.then((myMap) => {
  console.log("Full list of contacts:");
  for (let [key,value] of myMap) {
    console.log(key + " = " + value);
  }

  console.log("3 items of contacts:");
  const arr = Array.from(myMap.entries()) // converting to an array
  const sliceOf3 = arr.slice(0,3) // reslicing the array to get only first 3 elements
  for (let [key,value] of sliceOf3) {
    console.log(key + " = " + value);
  }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。