recherche

Maison  >  Questions et réponses  >  le corps du texte

Quel est le moyen le plus efficace de convertir toutes les clés d'un objet en minuscules ?

<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粉066224086P粉066224086469 Il y a quelques jours560

répondre à tous(2)je répondrai

  • P粉792026467

    P粉7920264672023-08-23 10:44:49

    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.

    répondre
    0
  • P粉258788831

    P粉2587888312023-08-23 00:25:13

    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.

    répondre
    0
  • Annulerrépondre