Estoy tratando de cambiar el nombre de todas las claves en un objeto a una clave nueva y diferente que es valiosa, pero todas las soluciones que encontré en Internet muestran cómo agregar un prefijo a una clave existente y así cambiarle el nombre.
tengo la siguiente implementacion
const shippingOption = { "": "Automatic", "ES_CartasNacionalesDeMas20": "Correos: cartas ordinarias, 2-4 Days", "ES_CorreosCartasCertificadas": "Correos: cartas certificadas, 2-4 Days", "ES_CorreosCartasCertificadasUrgentes": "Correos: cartas certificadas urgentes, 1-2 Days", "ES_CorreosChronoexpres": "Correos Express / Paq 24, 1 Day", "ES_CorreosPaq48": "Correos: Paq Premium, 2 Days", "ES_CorreosPaq72": "Correos: Paq Estándar, 2-3 Days", "ES_EconomyDeliveryFromAbroad": "Envío económico desde el extranjero, 10-22 Days", "ES_EconomyShippingFromGC": "Envìo economico desde China/Hong Kong/Taiwan to worldwide, 11-35 Days", "ES_EconomySppedPAK": "Envìo SpeedPAK economico desde China/Hong Kong/Taiwan, 10-15 Days", "ES_ENTREGA_KIALA_8KG": "Entrega a un punto Kiala (hasta 8 kg), 2-4 Days", "ES_EntregaConInstalacion": "Entrega con instalación (ver detalles), 3-5 Days", "ES_EntregaEnElPortal": "Entrega en el portal (ver detalles), 3-5 Days", "ES_EntregaEnNacexShop": "Entrega en NACEX.shop, 1-2 Days", "ES_EnvioEstandarAIslasBalearesCeutaMelilla": "Envío estándar a Ceuta/Melilla, 3-7 Days", "ES_EnvioEstandarALasIslasCanarias": "Envío estándar a las islas Canarias, 3-7 Days" } let renamed = Object.entries(shippingOption).reduce((acc, [k, v]) => { return { ...acc, [`value[${k}]`]: v }; }, {}) console.log(renamed)Resultados previstos
const shippingOption = { "value": "Automatic", "value": "Correos: cartas ordinarias, 2-4 Days", "value": "Correos: cartas certificadas, 2-4 Days", "value": "Correos: cartas certificadas urgentes, 1-2 Days" }Quiero que todas las claves del objeto cambien de nombre a valor. ¿Cómo puedo hacer esto?
Su reductor solo debe usar v en lugar de k si desea nombrar usando el valor de cada propiedad:
let renamed = Object.entries(shippingOption).reduce( (acc, [k, v]) => { return { ...acc, [`value[${v}]`]: v}; }, {}, );Tenga en cuenta que si tiene 2 valores idénticos, se sobrescribirán entre sí para que solo termine con el último.
Puede usar tipos asignados y literales de cadena para escribir el resultado de esta operación:
type ValueKey<K extends string> = `value[${K}]` type ConvertToValueKeys<T> = {} & { [K in keyof T & string as ValueKey<K>]: T[K] } let renamed= Object.entries(shippingOption).reduce((acc, [k, v]) => { return { ...acc, [`value[${k}]`]: v}; }, {} as ConvertToValueKeys<typeof shippingOption>) renamed["value[ES_CartasNacionalesDeMas20]"] // ok renamed["value[ES_CartasNacionalesDeMas210]"] // err