如何修复声纳问题 "Update or refactor this function so that its implementation doesn't duplicate the one on line xxx"

How to fix sonar issue "Update or refactor this function so that its implementation doesn't duplicate the one on line xxx"

SonarQube 将这 4 个函数识别为某些特定行中的重复函数:

  1. beneficiaires.forEach(受益人 => {
  2. () => {

这是我的功能:

affectPercentageToBeneficiares(beneficiaires: BeneficiaryData[], sum: number) {
    let numberOfBeneficiaresWithEmptyPrecentage = this.getBeneficiaresWithEmptyPercentageNumber(beneficiaires);
    let valueToAffecte = (100.02 - sum) / numberOfBeneficiaresWithEmptyPrecentage;
    beneficiaires.forEach(beneficiaire => {
        if (beneficiaire.percentage == "") {
            valueToAffecte = Math.round(valueToAffecte * 100) / 100;
            beneficiaire.percentage = "" + valueToAffecte;
        }
    })
}

affectPercentageToBeneficiaresInZeroCase(beneficiaires: BeneficiaryData[]) {
    let numberOfBeneficiaresWithEmptyPrecentage = this.getBeneficiaresWithEmptyPercentageNumber(beneficiaires);
    let valueToAffecte = (100) / numberOfBeneficiaresWithEmptyPrecentage;
    beneficiaires.forEach(beneficiaire => {
        if (beneficiaire.percentage == "") {
            valueToAffecte = Math.round(valueToAffecte * 100) / 100;
            beneficiaire.percentage = "" + valueToAffecte;
        }
    });
}

this.userProfilService.updateUser(this.UpdatedUser)
    .subscribe(
        () => {
            this.toastr.success('User has been updated successfully', null, {
                enableHtml: true,
            });
        },
        (err) => {
            this.toastr.error('erreur dans la modification utilisateur', null, {
                enableHtml: true,
            });
        }
    );

this.userProfilService.addUser(this.User)
    .subscribe(
        () => {
            this.toastr.success('User has been created', null, {
                enableHtml: true,
            });
        },
        (err) => {
            throw err;
        }
    );

是否有解决前两个函数问题的解决方案,而不必将它们合并为一个函数?

谢谢

您不必合并函数,问题是您在两个地方具有完全相同的函数(forEach 回调)。将受益人的更新放入它自己的函数或方法中,并从两个地方调用它:

// Outside the class
function updateBeneficiaires(beneficiaires, valueToAffecte) {
    beneficiaires.forEach(beneficiaire => {
        if (beneficiaire.percentage == "") {
            valueToAffecte = Math.round(valueToAffecte * 100) / 100;
            beneficiaire.percentage = "" + valueToAffecte;
        }
    });
}

// In the class
affectPercentageToBeneficiares(beneficiaires: BeneficiaryData[], sum: number) {
    let numberOfBeneficiaresWithEmptyPrecentage = this.getBeneficiaresWithEmptyPercentageNumber(beneficiaires);
    let valueToAffecte = (100.02 - sum) / numberOfBeneficiaresWithEmptyPrecentage;
    updateBeneficiaires(beneficiaires, valueToAffecte);
}

affectPercentageToBeneficiaresInZeroCase(beneficiaires: BeneficiaryData[]) {
    let numberOfBeneficiaresWithEmptyPrecentage = this.getBeneficiaresWithEmptyPercentageNumber(beneficiaires);
    let valueToAffecte = (100) / numberOfBeneficiaresWithEmptyPrecentage;
    updateBeneficiaires(beneficiaires, valueToAffecte);
}

(或者将其设为 class 方法,但它不使用任何 class 状态,因此可能是私有静态。)