Javascript 检查CSV解析文件中的重复项

Javascript 检查CSV解析文件中的重复项,javascript,reactjs,algorithm,csv,parsing,Javascript,Reactjs,Algorithm,Csv,Parsing,我有一个解析的CSV文件,格式如下: const data = [ ["ID", "Full name", "pHone", "Email", "Age", "Experience", "Yearly Income", "Has children", "License states", "Expira

我有一个解析的CSV文件,格式如下:

const data = [
    ["ID", "Full name", "pHone", "Email", "Age", "Experience", "Yearly Income", "Has children", "License states", "Expiration date", "License number", "Duplicated With"],
    [1, "Alex Cho", "+18900991919", "cho.cho@gmail.com", "12", "21", "200", "FALSE", "AL | New York | District of Columbia | Montana", "12-12-2030", "1xr567", null],
    [2, "Alex Cho", "1900991919", "12351235@yandex.ru", "0", "12", "true", "TRUE", "Alabama | American Samoa", "12/31/1998", "1xr567", null].
    [3, "Alex Cho", "8982394689", "alex.swarts@ukr.net", "-1", "8", "1200.11", "FALSE", "Northern Mariana Islands", "date", "kas317", null],
    [4, "Alex Cho", "18900991919", "cho.cho", "-99", "100", "1200.100", "YES", "Palau", "02-11-2021", "1nasd567213", null],
    [5, "Alex Cho", "+18900991919", "testEmail@gmail.com", "11", "11", "12..00.11", "NO", "Puerto Rico", "04-11-2021", "1xr567!(%^!@)", null],
    [6, "Alex Cho", "+18900991919", "@!%*!&@!@@gmail.com", "100", "10", "999999.11", " ", "West Virginia | North Carolina | North Dakota", "12/31/2022", "1xr*@#", null],
    [7, "Alex Cho", "+10950943225", "(*!&@^$%12481Asd@gMAIL.com)", "44", "10", "12.00.11", "TRUE", "Virgin Islands", "  2022-12-03", "1xr___", null],
    [8, "Alex Cho", "+10950943225", "(*!&@^$%12481Asd@gMAIL.com)", "44", "10", "12.00.11", "TRUE", "Virgin Islands", "  2022-12-03", "ABC123", null],
]
现在,我需要检查电子邮件和电话的副本。如果电话或电子邮件在任何项目中都是相同的,我需要注意它,并在我创建的最后一列“duplicated with”中做一个标记。如果您可以在图片上看到,则有一个附加列,并且必须有重复的ID

但是,我也不知道如何实现这一点。
您至少有两种选择:

  • 通过电话和电子邮件对数组进行排序,然后在数组上循环,将每个条目与下一个条目进行比较。如果它们相同,则将当前记录标记为与上一条记录重复

  • 使用map(),在数组上循环(无需先对其排序),并检查map中是否存在phone+电子邮件条目。如果是,则当前条目是重复的,如果不是,则使用键=电话+电子邮件和记录号码的值添加到地图中


  • 您至少有两种选择:

  • 通过电话和电子邮件对数组进行排序,然后在数组上循环,将每个条目与下一个条目进行比较。如果它们相同,则将当前记录标记为与上一条记录重复

  • 使用map(),在数组上循环(无需先对其排序),并检查map中是否存在phone+电子邮件条目。如果是,则当前条目是重复的,如果不是,则使用键=电话+电子邮件和记录号码的值添加到地图中


  • 我希望我正确地理解了你们的要求。你需要这样的东西看起来:

    const数据=[
    [“身份证”、“全名”、“电话”、“电子邮件”、“年龄”、“经验”、“年收入”、“有子女”、“许可证状态”、“有效期”、“许可证号码”、“与”]重复],
    [“1”、“Alex Cho”、“+189009919”、“Cho。cho@gmail.com“,“12”,“21”,“200”,“FALSE”,“AL |纽约|哥伦比亚特区|蒙大拿州”,“12-12-2030”,“1xr567”],
    [“2”、“Alex Cho”、“19009919”12351235@yandex.ru“,“0”,“12”,“真”,“真”,“阿拉巴马|美属萨摩亚”,“1998年12月31日”,“1xr567”],
    [“3”,“Alex Cho”,“8982394689”,“Alex。swarts@ukr.net“、“-1”、“8”、“1200.11”、“假”、“北马里亚纳群岛”、“日期”、“kas317”],
    [“4”、“Alex Cho”、“18933991919”、“Cho.Cho”、“-99”、“100”、“1200.100”、“是”、“帕劳”、“02-11-2021”、“1nasd567213”],
    [“5”,“Alex Cho”,“+18900991222”testEmail@gmail.com“,”11“,”11“,”12..00.11“,”否“,”波多黎各“,”2021年11月4日“,”1xr567!(^!@)”,
    [“6”、“Alex Cho”、“+18933991919”、“gmail.com”、“100”、“10”、“99999.11”、“西弗吉尼亚州、北卡罗来纳州、北达科他州”、“2022年12月31日”、“1xr*#”],
    ]
    const new_data=data.map((项目、索引)=>{
    const clean|u phone=项目[2]。替换(/^(\+1| ^1)/,“”);//清除电话号码
    常量dup_id=[];
    data.forEach((元素,ind)=>{
    if((索引!==ind)&&(元素[2]。包括(清洁手机)| |项[3]==element[2]))
    dup_id.push(元素[0])
    })
    索引和项目推送(dup_ID);
    退货项目;
    });
    
    console.log(新数据)
    我希望我正确理解了您的需求。你需要这样的东西看起来:

    const数据=[
    [“身份证”、“全名”、“电话”、“电子邮件”、“年龄”、“经验”、“年收入”、“有子女”、“许可证状态”、“有效期”、“许可证号码”、“与”]重复],
    [“1”、“Alex Cho”、“+189009919”、“Cho。cho@gmail.com“,“12”,“21”,“200”,“FALSE”,“AL |纽约|哥伦比亚特区|蒙大拿州”,“12-12-2030”,“1xr567”],
    [“2”、“Alex Cho”、“19009919”12351235@yandex.ru“,“0”,“12”,“真”,“真”,“阿拉巴马|美属萨摩亚”,“1998年12月31日”,“1xr567”],
    [“3”,“Alex Cho”,“8982394689”,“Alex。swarts@ukr.net“、“-1”、“8”、“1200.11”、“假”、“北马里亚纳群岛”、“日期”、“kas317”],
    [“4”、“Alex Cho”、“18933991919”、“Cho.Cho”、“-99”、“100”、“1200.100”、“是”、“帕劳”、“02-11-2021”、“1nasd567213”],
    [“5”,“Alex Cho”,“+18900991222”testEmail@gmail.com“,”11“,”11“,”12..00.11“,”否“,”波多黎各“,”2021年11月4日“,”1xr567!(^!@)”,
    [“6”、“Alex Cho”、“+18933991919”、“gmail.com”、“100”、“10”、“99999.11”、“西弗吉尼亚州、北卡罗来纳州、北达科他州”、“2022年12月31日”、“1xr*#”],
    ]
    const new_data=data.map((项目、索引)=>{
    const clean|u phone=项目[2]。替换(/^(\+1| ^1)/,“”);//清除电话号码
    常量dup_id=[];
    data.forEach((元素,ind)=>{
    if((索引!==ind)&&(元素[2]。包括(清洁手机)| |项[3]==element[2]))
    dup_id.push(元素[0])
    })
    索引和项目推送(dup_ID);
    退货项目;
    });
    
    console.log(new_data)
    如果您只是显示数组所需的结果,将非常有用。@codemonkey好吧,我需要这样的内容:第一个元素的ID为5,第二个元素的ID为10[“+189009919”,”testEmail@gmail.com“,10],“+18900991919”,“@!%*!&@!@@gmail.com,5],ID值是多少?数组索引+1?@codemonkey Yes如果您只是简单地显示数组的预期结果,这将非常有用。@codemonkey好吧,我需要这样的内容:第一个元素的ID为5,第二个元素的ID为10[“+189009919”testEmail@gmail.com“,10],“+18900991919”,“@!%*!&@!@@gmail.com,5],ID值是多少?数组索引+1?@codemonkey yesI已经更新了一个数组,但是我不明白,如何检查它我已经更新了一个数组,但是我不明白,如何检查它,我已经更新了我的数组,你能对新数组做同样的处理吗,而且,你不能用headers@AlexeyPetrenko更新。您好,我已经更新了我的阵列,你能对新数组做同样的处理吗?同样,你不能接受第一个元素headers@AlexeyPetrenko更新。