【问题标题】:How do I add a new field for every object in the array?如何为数组中的每个对象添加一个新字段?
【发布时间】:2021-08-11 12:58:01
【问题描述】:

如何向articles 数组中的每个对象添加一个新的shortText 字段?

articles.forEach((article) => {
        request(article.link, (err, response, html) => {
          if (!err && response.statusCode == 200) {
            const $ = cheerio.load(html);
            const textData = $('.ssrcss-hmf8ql-BoldText');
            textData.each((index, element) => {
              article.shortText = $(element).text();
            });
          }
        });
      });

示例文章数组

[
  {
    headline: 'Scale of Russian mercenary mission in Libya exposed',
    link: 'https://bbc.com/news/world-africa-58009514'
  },
  {
    headline: 'Afghan president rallies Taliban-besieged city',
    link: 'https://bbc.com/news/world-asia-58170847'
  }
]

我想循环遍历上面的数组并将shortText字段添加到每个对象

【问题讨论】:

  • 现在的行为是什么?你能分享一个示例输入数据和输出数据吗?
  • 您当前的代码永久重新分配article.shortText,因此最后将其分配给textData的最小值。此外,您可能不需要 jQuery。你到底想做什么?
  • 首先,您在forEach 中调用request 是一件坏事,因为forEach 不会等待异步函数得到解决,您需要使用for而是循环。

标签: javascript web-scraping cheerio


【解决方案1】:

//add fullname field in array of objects

/*
arrayOfObjects =arrayOfObjects.map((instanceObject) => ({
        ...instanceObject,
        newfield : values,
        }))
*/

const getUsers = async () => {
  const response = await fetch(
    "https://www.json-generator.com/api/json/get/cfrfjgAOIy?indent=2"
  );
  let users = await response.json();

  users = users.map((person) => ({
    ...person,
    fullname: `${person.firstName} ${person.lastName}`,
  }));

  console.log(users);
};

getUsers();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多