11
votes

Comment faire des touches d'objet JavaScript en majuscule?

Quelqu'un peut savoir un bon moyen de transformer cela?: XXX PRE>

dans: P>

var obj = [{Key1: value1,Key2: value2},{Key3: value3,Key4: value4}];


4 commentaires

Toute raison que vous voudriez faire cela? Tout code qui utilise les anciennes clés va casser, car les clés sont sensibles à la casse.


Vous recherchez une regex ou un moyen de le faire pendant que le code est en cours d'exécution?


@Marc B, j'ai très bien pu choisir de le faire si, par exemple, je fais JQGrids et les noms de colonne ont une première lettre en majuscule. Ensuite, disons que je récupère Json à partir d'une API existante et que les clés doivent réellement faire correspondre le cas afin que JQGrid fonctionnera correctement. Dans ce cas, je voudrais garantir que les clés que je reçois du JSON ont également une première lettre majuscule et ergo.


@Tjameson, étant donné la fréquence dont je dois effectuer cette opération, la vitesse n'est pas un goulot d'étranglement, je dirais donc quelle que soit la fonction fonctionne, y compris une regex.


6 Réponses :


19
votes

boucle en supprimant et remplacez: xxx


3 commentaires

+1, mais Notez si l'objet de démarrage contient à la fois une version minuscule et des capuchons initiale d'un nom de clé particulier, ce dernier sera écrasé. I.e., {Key1: 1, Key1: 2} sera finalement en tant que {Key1: 1} . (Aussi, le obj [i] = A; après le pour est redondant, n'est-ce pas?)


La seule différence est que j'ai utilisé des tranches au lieu de sous-chaînes. Sinon, c'est excellent.


Vous pouvez supprimer la propriété d'origine (une [touche]) après avoir défini la nouvelle propriété, puis vous n'avez pas besoin de la variable TEMP.



-4
votes

Utilisez la fonction _.capitalize de Lodash

_. Capitalize ('FirstName') => Prénom


0 commentaires

6
votes

A partir de 2019, vous pouvez utiliser Object.fromentries Code> :

p>

let populations = {london: 8.9, beijing: 21.54, mumbai: 18.41};  // March 2020

let entries = Object.entries(populations);
let capsEntries = entries.map((entry) => [entry[0][0].toUpperCase() + entry[0].slice(1), entry[1]]);
let capsPopulations = Object.fromEntries(capsEntries);

console.log(capsPopulations);


1 commentaires

Vous pouvez également utiliser une déstructuration ici: entrées .MAP (([k, v]) => [k [0] .TUPPERCASE () + k .slice (1), v]) .



0
votes
    const transform = (arrObj) => {
    let newObj=[];
    for(let obj of arrObj) {
      let temp=new Object();
      let keys = Object.keys(obj);
      let values = Object.values(obj);
      let i=0;
      keys.forEach(key => {
          key=key[0].toUpperCase() + key.slice(1);
          temp[`${key}`]=values[i++];
      });
      newObj.push(temp);
    }
    return newObj;
  };
  const arrObj = [{first: 'satya', last:'prakash'}, {college: 'AIT'}];
  console.log(transform(arrObj));
  

0 commentaires

0
votes

Si vous avez besoin de capitaliser une première lettre, vous pouvez utiliser La réponse de Jérémie

ou si vous devez capitaliser Première lettre de chaque mot considère comme suit p>

p>

let populations = {"london": 8.9, "beijing": 21.54, "mumbai": 18.41, "new york": 19.4};
let entries = Object.entries(populations);
// Capitalize first letter of each word 
let capsEntries = entries.map((entry) => [entry[0].replace(/(^\w{1})|(\s+\w{1})/g, letter => letter.toUpperCase()), entry[1]]);
let capsPopulations = Object.fromEntries(capsEntries);

console.log(capsPopulations)


0 commentaires

1
votes

Une autre approche (plus propre)

importer * comme _ de 'Lodash';

Fonction CapitalizeObjectkeys (Obj) { retour _.transform (obj, (résultat, val, clé) => { Résultat [Key.Charat (0) .TUPPERCASE () + KEY.SLICE (1)] = Val; }); }

https://stackblitz.com/edit/js-hsqutg ? Embed = 1 & File = index.js


0 commentaires