我试图将对象中的所有键重命名为一个新的和不同的键,即值,但我在互联网上找到的所有解决方案都显示了如何在现有密钥中添加前缀,从而将其重命名。
我有以下实现
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)
预期结果
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"
}
我希望对象中的每个键都重命名为值,我如何才能做到这一点?
发布于 2022-03-24 09:08:31
如果您想使用每个属性的值来命名,那么还原器应该只使用v
而不是k
:
let renamed = Object.entries(shippingOption).reduce(
(acc, [k, v]) => {
return { ...acc, [`value[${v}]`]: v};
},
{},
);
请注意,如果您有两个相同的值,它们将相互覆盖,因此您将只得到最后一个值。
发布于 2022-03-24 09:09:42
可以使用映射类型和字符串文本键入此操作的结果:
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
https://stackoverflow.com/questions/71599487
复制相似问题