【问题标题】:Javascript: Return first duplicate from array of objects based on object first index valueJavascript:根据对象第一个索引值从对象数组中返回第一个副本
【发布时间】:2020-10-27 01:35:27
【问题描述】:

我需要创建一个函数来仅显示来自第一个重复对象的重复数据。如果您查看我的代码,我有一个数组,其中包含对象。我的数据结构是这样的:

[
 { data: ["22409972", "1267304", "1000", "FG-18-1267304"] },
 { data: ["22409972", "1267304", "2000", "FG-18-1267304"] }
]

在这种情况下,我不想包含第二个数据对象,因为它的第一个索引已经存在于第一个对象“22409972”中

我需要一个可以支持多个具有相同第一个索引的重复对象的解决方案,但仍然只想返回包含重复索引的第一个对象

基本上如果存在重复对象,则将其从 arrayThatContainsDuplicates 数组中删除

我试图用这个作为解决方案

 const noDuplicates = [];
    for (let i = 0; i < duplicateRows.length; i++) {
      if (i + 1 < duplicateRows.length) {
        if (duplicateRows[i].data[0] !== duplicateRows[i + 1].data[0]) {
          noDuplicates.push(duplicateRows[i]);
        }
      }

The issue with this code is the duplicates are still being returned in the noDuplicates array

【问题讨论】:

    标签: javascript arrays object filter


    【解决方案1】:

    您的代码的问题在于它仅将当前对象与下一个对象进行比较。当前对象的副本可能位于数组中的任何位置,您的代码没有考虑到这一点。

    改用这个:

    let firstElements = [];
    let noDuplicates = [];
    duplicateRows.forEach(object => {
        if (!firstElements.includes(object.data[0])) {
            firstElements.push(object.data[0]);
            noDuplicates.push(object);
        }
    });
    

    【讨论】:

      【解决方案2】:

      另一种方法。

      迭代数组,并创建一个对象。由于对象键是唯一的,如果有重复,它将替换。您还可以添加一个检查密钥是否已经存在,在这种情况下不要再次更新它。

      let list = [{
          data: ["22409972", "1267304", "1000", "FG-18-1267304"]
        },
        {
          data: ["22409972", "1267304", "2000", "FG-18-1267304"]
        },
        {
          data: ["22409979", "1267304", "2000", "FG-18-1267304"]
        },
        {
          data: ["224099720", "1267304", "2000", "FG-18-1267304"]
        },
        {
          data: ["224099728", "1267304", "2000", "FG-18-1267304"]
        },
        {
          data: ["224099728", "1267304", "2000", "FG-18-1267304"]
        }
      ];
      
      
      let result = {};
      
      list.forEach(item => {
        result[item.data[0]] = item;
      });
      
      console.log(Object.values(result));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 1970-01-01
        • 1970-01-01
        • 2020-09-24
        • 2020-03-30
        • 1970-01-01
        • 2023-01-23
        相关资源
        最近更新 更多