首页 > 解决方案 > 节点js中lodash中_.filter方法的问题

问题描述

我的目标是删除 CSV 中已经存在 mailchimp 电子邮件地址的每一行。

我试过这个函数,但它没有给我正确数量的元素:

async function testDeleteEmails(listID, csvFileLocation){
  csvContent = fs.readFileSync(csvFileLocation, "utf-8");
  let { data } = Papa.parse(csvContent, { header: true, skipEmptyLines: true });
  let duplicateEmails = await compareArrayEmailsMailchimpAndCSV (fetchMailchimpMembersEmails(listID), getArrayEmailsFromLocalCSV(csvFileLocation))
  let newCSV = _.filter(data, function(row){
      return _.includes(duplicateEmails, row["Email of user"])
  })
  console.log(newCSV)
}
testDeleteEmails("MY LIST ID", ".../myCSV.csv")

compareArrayEmailsMailchimpAndCSV是一个获取所有重复电子邮件地址数组的函数(那些在 mailchimp 和那些在我的 CSV 中)

我在 mailchimp 中有 1058 个电子邮件地址。我的 CSV 中有 960 个电子邮件地址,我的函数compareArrayEmailsMailchimpAndCSV给了我 797 个电子邮件地址,所以如果我是正确的,我有 163 个电子邮件地址可以保存在我的 CSV 中。当我使用该功能testDeleteEmails时,它会给我 869 个电子邮件地址,这不是我想要的。我是否错误地使用了 lodash 方法?

知道我必须动态地执行它,因为我必须使用其他列表和 CSV 文件来执行它。

我知道该功能还没有完成,当newCSV数据正确时,我只需要解开数据并将其放入 CSV 文件中。

标签: javascriptnode.jsarrayslodashmailchimp

解决方案


我认为这个问题与 Lodash 过滤器无关。我认为问题出在您的 CSV 文件中。CSV 中可能存在重复的电子邮件地址。请检查您的 CSV 文件。你可以使用 Lodash 中的 uniqueBy 函数来检查它。

  const uniqueData = _.uniqBy(data, 'Email of user');

并检查数据和唯一数据的长度。


推荐阅读