<p>J'ai trouvé la solution suivante</p>
<pre class="brush:php;toolbar:false;">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);
}</pré>
<p>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 ? </p>
<p>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. </p>
Cela crée-t-il davantage de confusion ? L’éboueur sera-t-il content de cela ? </p>
Utilisez
Object.fromEntries
(ES10)Solution locale et immuable utilisant de nouvelles méthodes
Object.fromEntries
:En attendant que cette fonction soit largement disponible, vous pouvez utiliser la polyfilldé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.