【问题标题】:Object that contains an array of arrays, how to remove object so it's only an array of arrays包含数组数组的对象,如何删除对象,使其只是数组数组
【发布时间】:2022-01-29 04:25:20
【问题描述】:

我有一个包含数组数组的对象。我想删除该对象,因此它只是一个数组数组。 JavaScript中有没有办法做到这一点,还是我不走运?我正在使用 Puppeteer 抓取页面并在映射一组元素后返回所有文本。我已经编写了一个函数来将它分离到我想要的数组中,但是 Puppeteer 将它作为我不想要的对象返回。 它返回的对象是这样的

更新

原来它返回的是一个对象的承诺。 所以我登录到控制台时得到的结果是

Promise {
    [ [], [], []... ]
}

所以我想我的新问题是如何只获得承诺的结果。

data = {
  [
    [], [], []...
  ]
}; 

我希望它看起来像

data = [
  [], [], []...
]

木偶功能

const getText = async (data) => {
    const browser = await puppeteer.launch({ headless: true })
    const page = await browser.newPage()
    await page.goto(data.URL, { waitUntil: 'networkidle2' });
    const options = await page.$$eval('table[class="data-table"] > tbody > tr > td', (options) =>
        options.map((option) => option.textContent)
    );    
    await browser.close();
    const finalData = createGroups(options, 228);
    // the puppeteer function returns each texContent as a single array, meaning the page 
    // I'm scraping returns 1140 arrays, I want each array in my final product to contain 5 
    // elements so I did 1140/5, that's how I got 228
    console.log(finalData);
}

创建组函数

const createGroups = async (arr, numGroups) => {
    const perGroup = Math.ceil(arr.length / numGroups);
    const finalArr = new Array(numGroups)
      .fill('')
      .map((_, i) => arr.slice(i * perGroup, (i + 1) * perGroup));
    return finalArr;
}

或者有没有一种方法可以提取包含较小数组的大数组并将其放入它自己的变量中?使用数组的方法是LargeArray[0],但我不知道如何使用对象。

谢谢

【问题讨论】:

  • 结构 { [...] } 是不可能的,你确定它不是这样的:{ someKey: [...] } 因为一个对象需要有键
  • 我又看了一遍,看起来它正在返回一个承诺,当我将它记录到控制台时,我得到Promise { [ [ 'Afghanistan', '0', '312', '+312', '' ],...
  • 你可以使用 await 或者你得到的任何结果 apply .then() 示例:yourResult.then((data) => {这里的数据将是数组数组})

标签: javascript node.js arrays puppeteer


【解决方案1】:

你得到一个Promise返回的原因是你的createGroupsasync(不需要),而async函数的返回类型总是Promise

最好的办法就是把它改成不是async

const createGroups = (arr, numGroups) => { // rest of code

如果出于某种原因,你不想这样做,你可以在你的 main 方法中 await 它。

const finalData = await createGroups(options, 228);

在我能想到的几乎所有情况下,您应该使用async 的唯一时间是:

  • 您在方法的某处使用了await
  • 您将函数作为回调传递给另一个函数,该函数期望回调返回 Promise,而您不想手动创建 Promise

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    相关资源
    最近更新 更多