J'ai trouvé la solution suivante
function keyToLowerCase (obj) { var clés = Objet.keys(obj); var n = clés.longueur; tandis que (n--) { var key = keys[n]; // "mettez-le en cache", pour moins de recherches dans le tableau if (key !== key.toLowerCase()) { // Peut déjà être en minuscules obj[key.toLowerCase()] = obj[key] // Remplace la valeur par la nouvelle clé minuscule delete obj[key] // Supprimer l'ancienne clé } } retour (obj); }Mais je ne sais pas comment la v8 va le gérer, par exemple, supprimera-t-elle réellement d'autres clés ou supprimera-t-elle simplement la référence, puis le ramasse-miettes me mordra dans le dos ?
De plus, j'ai créé ces tests et j'aimerais que vous y ajoutiez vos réponses afin que nous puissions voir comment elles correspondent.
Cela crée-t-il davantage de confusion ? L’éboueur sera-t-il content de cela ?
Utilisez
Object.fromEntries
(ES10)Solution locale et immuable utilisant de nouvelles méthodes
Object.fromEntries
:En attendant que cette fonctionsoit largement disponible, vous pouvez utiliser lapolyfilldéfinition personnalisée suivante :
L'un des avantages est que cette méthode est à l'opposé de
Object.entries
, vous pouvez donc désormais basculer entre la représentation d'objet et la représentation de tableau.Le moyen le plus rapide auquel je puisse penser est de créer un nouvel objet :
Je ne connais pas suffisamment le fonctionnement interne actuel de la v8 pour donner une réponse claire. Il y a quelques années, j'ai vu une vidéo dans laquelle un développeur discutait d'objets et si je me souviens bien, elle supprime simplement la référence et laisse le ramasse-miettes s'en occuper. Mais c’était il y a quelques années, donc même si c’était vrai à l’époque, ce n’est plus nécessairement vrai aujourd’hui.
Est-ce que cela vous causera des ennuis plus tard ? Cela dépend de ce que vous faites, mais probablement pas. La création d'objets éphémères est très courante, le code est donc optimisé pour le gérer. Mais chaque environnement a ses limites et peut-être que cela vous posera des problèmes. Vous devez tester avec des données réelles.