Quelqu'un peut savoir un bon moyen de transformer cela?: dans: P> var obj = [{Key1: value1,Key2: value2},{Key3: value3,Key4: value4}];
6 Réponses :
boucle en supprimant et remplacez:
+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} Code> sera finalement en tant que {Key1: 1} code>. (Aussi, le obj [i] = A; code> après le pour code> 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.
Utilisez la fonction _.capitalize de Lodash P>
_. Capitalize ('FirstName') => Prénom Code> P>
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);
Vous pouvez également utiliser une déstructuration ici: entrées .MAP (([k, v]) => [k [0] .TUPPERCASE () + k .slice (1), v]) code>.
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));
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)Une autre approche (plus propre) p>
importer * comme _ de 'Lodash'; p>
Fonction CapitalizeObjectkeys (Obj) { retour _.transform (obj, (résultat, val, clé) => { Résultat [Key.Charat (0) .TUPPERCASE () + KEY.SLICE (1)] = Val; }); } p>
https://stackblitz.com/edit/js-hsqutg ? Embed = 1 & File = index.js p>
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.