【问题标题】:Typescript array of objects check for duplicatesTypescript 对象数组检查重复项
【发布时间】:2020-05-28 03:37:52
【问题描述】:

我有需要检查对象项的重复项的要求。

在下面的对象数组中,我需要检查“empno”或“extension”,如果有任何重复项,则需要抛出错误。

我已经尝试过这个Stack Overflow link,但它对我不起作用。

[
    {
        "id": 269,
        "empno": "34567",
        "extension": 345
    },
    {
        "id": 269,
        "empno": "34568",
        "extension": 346
    },
    {
        "id": 269,
        "empno": "34569",
        "extension": 345
    },
    {
        "id": 269,
        "empno": "34567",
        "extension": 345
    }
]

【问题讨论】:

    标签: javascript angularjs angular typescript


    【解决方案1】:

    您可以构建一个Set 以允许有效查找现有值:

    const hasDuplicates = (data) => {
      const set = new Set();
    
      for (let {empno, extension} of data) {
        const key = `${empno}/${extension}`;
        if (set.has(key)) {
          return true;
        }
    
        set.add(key);
      }
    
      return false;
    };
    

    完整的 sn-p:

    const data = [{
        "id": 269,
        "empno": "34567",
        "extension": 345
      },
      {
        "id": 269,
        "empno": "34568",
        "extension": 346
      },
      {
        "id": 269,
        "empno": "34569",
        "extension": 345
      },
      {
        "id": 269,
        "empno": "34567",
        "extension": 345
      }
    ];
    
    const hasDuplicates = (data) => {
      const set = new Set();
      
      for (let {empno, extension} of data) {
        const key = `${empno}/${extension}`;
        if (set.has(key)) {
          return true;
        }
        
        set.add(key);
      }
      
      return false;
    };
    
    console.log(hasDuplicates(data));

    如果您希望以处理整个数组为代价来减少冗长,即使已经找到重复项,您也可以减少到 Set 并将其大小与原始数组进行比较:

    const hasDuplicates = (data) => data.length !== data.reduce((a, {empno, extension}) => a.add(`${empno}/${extension}`), new Set).size;
    

    完整的 sn-p:

    const data = [{
        "id": 269,
        "empno": "34567",
        "extension": 345
      },
      {
        "id": 269,
        "empno": "34568",
        "extension": 346
      },
      {
        "id": 269,
        "empno": "34569",
        "extension": 345
      },
      {
        "id": 269,
        "empno": "34567",
        "extension": 345
      }
    ];
    
    const hasDuplicates = (data) => data.length !== data.reduce((a, {empno, extension}) => a.add(`${empno}/${extension}`), new Set).size;
    
    console.log(hasDuplicates(data));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      相关资源
      最近更新 更多