J'ai 3 objets qui contiennent des informations sur les icônes svg (FontAwesome). Chaque objet a la même structure mais la propriété prefix
a une valeur différente. L'objet ci-dessous utilise fab
comme préfixe, le deuxième far
et le troisième fas
.
//find the index of object from array const objIndex = objects.findIndex(obj => obj.value === 'fab'); // make new object of updated object const updatedObj = { ...objects[objIndex], prefix: 'brands'}; // make new array of objects const updatedObjects = [ ...objects.slice(0, objIndex), updatedObj, ...objects.slice(objIndex + 1), ];
Deuxième objet:
const objects = [ ...Object.values( fab ), ...Object.values( far ), ...Object.values( fas ), ]
Troisième objet:
"brands": [ "facebook", "twitter", "instagram", ], "regular": [ "arrow-up", "arrow-left", "arrow-right", ], "solid": [ "carrot", "cat", "dog", ],
J'essaye de transformer les 3 objets vus ci-dessus en ceci: p>
{ "carrot": { "prefix": "fas", "iconName": "carrot", "icon": [ 448, 512, [], "f26e", "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7" ] }, "cat": { "prefix": "fas", "iconName": "cat", "icon": [ 448, 512, [], "f368", "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5" ] }, "dog": { "prefix": "fas", "iconName": "dog", "icon": [ 640, 512, [], "f369", "M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2" ] }, }
La partie délicate est également de changer le nom du préfixe en une autre valeur pour le tableau. fab
serait des marques, far
régulières et fas
solides.
J'utilise React et j'ai Babel. Voici ce que j'ai jusqu'à présent ...
{ "arrowUp": { "prefix": "far", "iconName": "arrow-up", "icon": [ 448, 512, [], "f26e", "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7" ] }, "arrowLeft": { "prefix": "far", "iconName": "arrow-left", "icon": [ 448, 512, [], "f368", "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5" ] }, "arrowRight": { "prefix": "far", "iconName": "arrow-right", "icon": [ 640, 512, [], "f369", "M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2" ] }, }
Il transforme tous les objets en tableaux mais je ne sais pas comment obtenir la structure que je veux.
Et pour changer le préfixe en nom, je pense que c'est un bon début ... Ceci est juste un exemple pour changer fab
en brands
{ "facebook": { "prefix": "fab", "iconName": "facebook-alt", "icon": [ 448, 512, [], "f26e", "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7" ] }, "twitter": { "prefix": "fab", "iconName": "twitter", "icon": [ 448, 512, [], "f368", "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5" ] }, "instagram": { "prefix": "fab", "iconName": "instagram", "icon": [ 640, 512, [], "f369", "M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2" ] }, }
3 Réponses :
Edit: Ajout de la conversion de camel-case en tirets
Si les objets sont toujours sectionnés comme vous l'avez posté, ne pourriez-vous pas simplement faire quelque chose comme:
{ brands: ["facebook", "twitter", "instagram"], regular: ["arrow-up", "arrow-left", "arrow-right"], solid: ["carrot", "cat", "dog"] }
Ce qui m'a donné le résultat:
const convertStrings = (str) => { return str.replace(/([A-Z])/g, (g) => `-${g[0].toLowerCase()}`); }; const objects = { "brands": Object.keys(fab).map(convertStrings), "regular": Object.keys(far).map(convertStrings), "solid": Object.keys(fas).map(convertStrings), }
Vous recherchez des clés d'objet que vous pouvez facilement obtenir de Object.keys ()
let obj1= {"facebook": { "prefix": "fab", "iconName": "facebook-alt","icon": [ 448, 512, [], "f26e", "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7" ]},"twitter": {"prefix": "fab", "iconName": "twitter", "icon": [ 448, 512, [], "f368", "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5" ] },"instagram": {"prefix": "fab","iconName": "instagram", "icon": [ 640, 512, [], "f369","M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2"]},} let obj2={"arrowUp": { "prefix": "far", "iconName": "arrow-up", "icon": [ 448, 512, [], "f26e", "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7"]},"arrowLeft": { "prefix": "far", "iconName": "arrow-left", "icon": [ 448, 512,[], "f368", "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5" ]}, "arrowRight": { "prefix": "far", "iconName": "arrow-right", "icon": [ 640, 512, [],"f369", "M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2"]},} let obj3 ={"carrot": {"prefix": "fas", "iconName": "carrot","icon": [ 448, 512, [],"f26e","M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7"]}, "cat": { "prefix": "fas", "iconName": "cat", "icon": [ 448, 512, [],"f368","M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5"]}, "dog": { "prefix": "fas", "iconName": "dog", "icon": [ 640, 512, [],"f369","M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2" ]},} let op = [ {'brand': Object.keys(obj1)}, {'regular': Object.keys(obj2).map(e=> obj2[e].iconName)}, {'solid': Object.keys(obj3)} ] console.log(op)
Désolé mon mal, j'ai supprimé le commentaire. Il y a cependant un autre problème. Le code crée des groupes de tableaux avec la valeur de clé d'objet, comme valeur de clé de tableau. La clé du tableau doit être la valeur iconName
de l'objet. Par exemple, {"arrowUp": {"prefix": "far", "iconName": "arrow-up" ...
devrait se transformer en "regular": ["arrow- up ", ...
pas " normal ": [" arrowUp ", ...
@CyberJunkie a modifié ma réponse pour inclure la conversion de cas de chameau
@CyberJunkie, vous pouvez vérifier celui mis à jour.tout ce dont vous avez besoin est simplement d'utiliser regex pour trouver la lettre majuscule et ajouter -
et changer les caractères correspondants en minuscules
@CodeManiac désolé, je ne pense pas avoir expliqué correctement. Il n'y a pas besoin de conversion de cas de chameau. Je veux juste remplacer la valeur de la clé par la valeur de iconName
de son tableau. Comme meilleur exemple, {"randomNameHere": {"prefix": "far", "iconName": "arrow-up" ...
où j'ai juste besoin de saisir le iconName < / code> et utilisez-le pour remplacer
randomNameHere
. Le nom de la clé peut différer de iconName et ne peut donc pas être converti avec regex.
@CyberJunkie je n'ai pas remarqué iconName
. vous pouvez vérifier la mise à jour
Vous pouvez utiliser Object.keys
pour obtenir les noms de clé, puis mapper sur les valeurs, en retournant obj[k[k .iconName
:
let fab= {"facebook": { "prefix": "fab", "iconName": "facebook-alt","icon": [ 448, 512, [], "f26e", "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7" ]},"twitter": {"prefix": "fab", "iconName": "twitter", "icon": [ 448, 512, [], "f368", "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5" ] },"instagram": {"prefix": "fab","iconName": "instagram", "icon": [ 640, 512, [], "f369","M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2"]},} let far={"arrowUp": { "prefix": "far", "iconName": "arrow-up", "icon": [ 448, 512, [], "f26e", "M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7"]},"arrowLeft": { "prefix": "far", "iconName": "arrow-left", "icon": [ 448, 512,[], "f368", "M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5" ]}, "arrowRight": { "prefix": "far", "iconName": "arrow-right", "icon": [ 640, 512, [],"f369", "M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2"]},} let fas ={"carrot": {"prefix": "fas", "iconName": "carrot","icon": [ 448, 512, [],"f26e","M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7"]}, "cat": { "prefix": "fas", "iconName": "cat", "icon": [ 448, 512, [],"f368","M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5"]}, "dog": { "prefix": "fas", "iconName": "dog", "icon": [ 640, 512, [],"f369","M482.2 372.1C476.5 365.2 250 75 242.3 65.5c-13.7-17.2 0-16.8 19.2-16.9 9.7-.1 106.3-.6 116.5-.6 24.1-.1 28.7.6 38.4 12.8 2.1 2.7 205.1 245.8 207.2 248.3 5.5 6.7 15.2 19.1 7.2" ]},} let op = [ {"brands": Object.keys(fab)}, {"regular": Object.keys(far).map(k => { return far[k].iconName; })}, {"solid": Object.keys(fas).map(k => { return fas[k].iconName; })} ] console.log(op)