javascript - 如何在 Javascript 中的单个 map 函数内执行两个操作

标签 javascript arrays puppeteer

我目前正在尝试从 Github 的趋势页面获取所有趋势存储库及其拥有的星星,并从中创建一个文本文件。网址是 this

我正在使用 Puppeteer 来实现同样的目的。

对于我这样做的存储库列表

const data = await page.evaluate(()=>{
        const tds =Array.from(document.querySelectorAll('.explore-content ol li div h3'));
        return tds.map(td => td.textContent);
    });

这给了我这样的结果

The top repositories are 

    charlax / professional-programming
,

    ssloy / tinyraytracer
,

    komeiji-satori / Dress
,

    ForrestKnight / open-source-cs
,

    hjacobs / kubernetes-failure-stories
,

    osforscience / deep-learning-ocean
,

    alexkimxyz / nsfw_data_scrapper
,

    kamranahmedse / developer-roadmap
,

    typescript-eslint / typescript-eslint
,

    Musish / Musish
,

    MisterBooo / LeetCodeAnimation
,

    yagiz / Bagel
,

    SpaceVim / SpaceVim
,

    antonmedv / fx
,

    pjialin / py12306
,

    braver / programmingfonts
,

    macrozheng / mall
,

    Snailclimb / JavaGuide
,

    schollz / howmanypeoplearearound
,

    flutterchina / flutter-in-action
,

    flutter / flutter
,

    rikschennink / shiny
,

    doocs / advanced-java
,

    MFatihMAR / Awesome-Game-Networking
,

    go-task / task

为了获得星星,我有另一个类似的函数

const stars = await page.evaluate(()=>{
        const stars = Array.from(document.querySelectorAll('.explore-content ol li div:nth-child(4) a'));
        return stars.map(star=>star.textContent);

    });

这样输出

顶级存储库有

    5,304
  ,

    379
  ,
          ,,,,,,

    1,173
  ,

    44

我想将两个方法的输出合并在一个方法中,以便我可以获得结果

charlax/professional-programming has 5,304 stars.

如何组合 data 的输出和stars方法或者我如何在一个方法中执行两个不同的操作。我可以在一个 map 中同时执行两个操作吗?方法?如果是这样怎么办?

最佳答案

也许有一种更安全的方法:

const data = await page.evaluate(() => {
  const exctactedData = [];
  for (const entry of document.querySelectorAll('ol.repo-list > li')) {
    exctactedData.push(`${
      entry.querySelector('h3').innerText
    } has ${
      entry.querySelector('a[href$="/stargazers"]').innerText.trim()
    } stars.`);
  }
  return exctactedData.join('\n');
});

关于javascript - 如何在 Javascript 中的单个 map 函数内执行两个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54301991/

相关文章:

javascript - Angular 和 ui 路由器 - 如何定义路由

javascript - 尝试确定是否已加载所有图像时 Node.js 挂起

node.js - 有没有办法等待 puppeteer 中 page.click() 之后添加动态内容

c - 解码这些 Valgrind 调试器内存错误在我的代码中意味着什么

mutation-observers - 如何将mutationobserver注入(inject)puppeteer

javascript - 如何使用路由器/路由器参数在 react 中将数据从一个父组件传输到另一个父组件

javascript - 如何使用 RxJS 发出不超过每 N 秒的重复 HTTP 请求

javascript - 如何在 JavaScript 中找到换行符并替换为 <br> 元素?

javascript - 将新项目附加到 Vue 2 中的列表

php - 如何检查多维数组是否为空?