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 :
Object.fromEntries = arr => Object.assign({}, ...Array.from(arr, ([k, v]) => ({[k]: v}) ));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 :
var key, keys = Object.keys(obj); var n = keys.length; var newobj={} while (n--) { key = keys[n]; newobj[key.toLowerCase()] = obj[key]; }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.