Quel est le moyen le plus efficace de convertir toutes les clés d'un objet en minuscules ?
P粉066224086
P粉066224086 2023-08-22 12:42:40
0
2
538
<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>

P粉066224086
P粉066224086

répondre à tous(2)
P粉792026467

Utilisez Object.fromEntries (ES10)

Solution locale et immuable utilisant de nouvelles méthodes Object.fromEntries :

const newObj = Object.fromEntries(
  Object.entries(obj).map(([k, v]) => [k.toLowerCase(), v])
);

En attendant que cette fonction soit largement disponible, vous pouvez utiliser la polyfilldé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.

P粉258788831

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!