我需要在特定条件下查找数组中的重复行

问题描述 投票:0回答:1

我有一个帐户列表,需要找到具有特定条件的重复行,并且当存在多于一个条件的行时显示错误。

  1. 相同的编号和描述
  2. 相同编号的不同描述
  3. 数字为空,描述相同。
  4. 不同的编号和相同的描述#`

    const accounts = [
            { id: 1, number: '1', description: 'desc1' },
            { id: 2, number: '2',  description: 'desc2' },
            { id: 3, number: null, description: null },
            { id: 4, number: '1', description: 'desc1' },
            { id: 5, number: '1', description: 'desc3' },
            { id: 6, number: '1', description: 'desc4' },
            { id: 7, number: null, description: 'desc5' },
            { id: 8, number: null, description: 'desc5' }
          ];
        findDuplicates(accounts) {
          const duplicates = accounts
            .map((account) => {
              return {
                count: 1,
                number: account.number,
                description: account.description
              };
            })
          .reduce((arr, row) => {
            // try to find the current row in count array
            const existingRow = arr.find((countRow) => {
              return (countRow.number === row.number && countRow.description === row.description);
            });
            if (existingRow !== undefined) {
              existingRow.count += 1;
            } else { // otherwise, push it onto the count array
              arr.push(row);
            }`enter code here`
            return arr;
          }, []).filter((duplicateRows) => {
            return duplicateRows.count > 1; // filter the list down to only accounts with more than 1 account
          });
          return duplicates;
    
javascript typescript validation grid
1个回答
0
投票

这个简单的生成器函数技巧可以使您重复

const accounts = [
        { id: 1, number: '1', description: 'desc1' },
        { id: 2, number: '2',  description: 'desc2' },
        { id: 3, number: null, description: null },
        { id: 4, number: '1', description: 'desc1' },
        { id: 5, number: '1', description: 'desc3' },
        { id: 6, number: '1', description: 'desc4' },
        { id: 7, number: null, description: 'desc5' },
        { id: 8, number: null, description: 'desc5' }
      ];

function *findDuplicates(accounts) {
  let bucket = [];
  
  for(let account of accounts) {
    const item = bucket.find(pr => pr.number === account.number 
      && pr.description === account.description);
    
    if(!item) {
      bucket = [...bucket, account];
      continue;
    }
    
    yield account;
  }
}

console.log([...findDuplicates(accounts)])
© www.soinside.com 2019 - 2024. All rights reserved.