Guide section 5.1 on object destructuring may lead to anti-pattern
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 45/100
- Type d'issue
- Documentation
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- javascript
- Domaine
- documentation
Piste de recherche
Commencez par la section 5.1, « Use object destructuring when accessing and using multiple properties of an object », dans README.md et comparez ses recommandations avec les exemples de cette issue. Examinez les cas d’anti-pattern proposés et ajoutez des recommandations expliquant quand l’accès direct aux propriétés peut être préférable, avec un exemple clair de la règle visée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
This issue is realted to guide section 5.1 Use object destructuring when accessing and using multiple properties of an object
Although the section rationale and examples are very clear and logical, IMO when followed unrestrictedly (or naively) it may lead to an anti-pattern with the bad features this very section is trying to avoid in the first place (repetitive code, opportunities for mistakes and unnecessary extra temporary references).
Apparently the anti-pattern arises more clearly when there is a combination of these conditions:
- Accessed object properties have meaningful names and are each only referenced once, thus not requiring local variables.
- There are more than a handful of accessed properties
- The accessed properties are mostly used to create a new object, with or without key/value transformations
Here's an example to illustrate:
// bad
function toNewUserType(user) {
const {
id: userId,
status: userStatus,
email,
phone,
encryptedPassword,
firstName,
middleName,
lastName,
jobTitle,
birthDate,
createdAt,
updatedAt,
address,
} = user;
return {
userId,
userStatus,
email,
phone,
encryptedPassword,
jobTitle,
birthDate,
createdAt: toDate(createdAt),
updatedAt: toDate(updatedAt),
address: toNewAddressType(address),
userHash: idToHash(userId),
fullName: getFullName(firstName, middleName, lastName),
};
}
// still bad
function toNewUserType({
id: userId,
status: userStatus,
email,
phone,
encryptedPassword,
firstName,
middleName,
lastName,
jobTitle,
birthDate,
createdAt,
updatedAt,
address,
}) {
return {
userId,
userStatus,
email,
phone,
encryptedPassword,
jobTitle,
birthDate,
createdAt: toDate(createdAt),
updatedAt: toDate(updatedAt),
address: toNewAddressType(address),
userHash: idToHash(userId),
fullName: getFullName(firstName, middleName, lastName),
};
}
// good
function toNewUserType(user) {
return {
userId: user.id,
userStatus: user.status,
email: user.email,
phone: user.phone,
encryptedPassword: user.encryptedPassword,
jobTitle: user.jobTitle,
birthDate: user.birthDate,
createdAt: toDate(user.createdAt),
updatedAt: toDate(user.updatedAt),
address: toNewAddressType(user.address),
userHash: idToHash(user.id),
fullName: getFullName(user.firstName, user.middleName, user.lastName),
};
}
If the package owners agree with the problem, I believe we should be able to add some content to warn about this anti-pattern and how to avoid it.
Thanks in advance.
- Langage dominant
- JavaScript
- Étoiles
- 148k
- Forks
- 26.5k
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de airbnb/javascript
-
Severity: Unhandled promise rejection in `whitespace-async.js` when ESLint async path is usedPeut-être pris @bodapatisaikrishna l’a pris il y a 51 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
airbnb/javascript#3237 · 6 commentaires ·
-
Inconsistent semicolon usage in examples (Arrays vs Functions)Peut-être pris @Developer-shivamMishra l’a pris il y a 41 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
airbnb/javascript#3152 · 4 commentaires ·
-
No error handling around execSync + JSON.parse in whitespace.js (ESLint 9 path)Peut-être pris @dataCenter430 l’a pris il y a 246 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 48/100
airbnb/javascript#3238 · 8 commentaires ·
-
Upgrading eslint-plugin-react-hooksPeut-être pris @weihongyu12 l’a pris il y a 392 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 38/100
airbnb/javascript#3186 · 3 commentaires · 2 réactions ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 45/100
airbnb/javascript#3173 · 9 commentaires · 1 réaction ·
Toutes les issues de airbnb/javascript
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Automattic/node-canvas#2633 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
capricorn86/happy-dom#2594 ·
Les mainteneurs répondent en général sous 1 jour
-
Decoding tag 1 (epoch date) with an 8-byte integer throws "Cannot mix BigInt and other types"Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
microsoft/monaco-editor#5575 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Les mainteneurs répondent en général sous 1 jour