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退货)

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

伊万德

由于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);
  }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章