【问题标题】:How can I get objects of Set type variable unique?如何使 Set 类型变量的对象唯一?
【发布时间】:2021-08-22 14:32:29
【问题描述】:

我正在研究一个抓取脚本,并发现了 Set 对象,它应该存储唯一的数据并且性能快速。所以我就这样试了

let scrapedMessages = new Set()

scrapedMessages.add({
                text,
                ...(images.length > 0 && {
                  images,
                }),
                senderID,
                timestamp,
              })

但是在查看抓取的数据时,我发现了这些类型的重复数据

  {
    "text": "Acne Fighting Facial Wash With Jojoba Beads",
    "senderID": "361571627329333",
    "timestamp": "1613017270619"
  },
  {
    "text": "Acne Fighting Facial Wash With Jojoba Beads",
    "senderID": "361571627329333",
    "timestamp": "1613017270619"
  }

这是否意味着对象集可能不是唯一的,或者我犯了一些错误。我是通过简单的数组来做的。但为了获得更好的性能,改为设置类型。可以实现吗?最佳做法是什么?

我正在 Nodejs 上运行 puppeteer 脚本。

【问题讨论】:

标签: javascript node.js web-scraping puppeteer


【解决方案1】:

JS 使用=== 运算符将新元素与集合中已经存在的所有其他元素进行比较,并根据它决定添加新元素还是忽略它。

问题是,对象是内存地址:

const a = {x: 1};
const b = {x: 1};
const c = a;

console.log(a===b); // false
console.log(a===c); // true
console.log(b===c); // false

所以这里有几件事你可以做:

  1. 扩展Set类并重写add方法来比较对象的属性,而不是使用====

  2. 不推荐,但您可以在添加之前简单地使用JSON.stringify(object)

【讨论】:

  • 你能提供第一个选项的任何代码示例吗?性能怎么样?
猜你喜欢
  • 2013-05-31
  • 2012-02-09
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
相关资源
最近更新 更多