Espero que esto no se cierre, no puedo encontrar ninguna pregunta adecuada.
ValueCódigo hasta ahora, faltando las minúsculas para la primera letra:
// Input: { toastDurationValue: 3000, toastPositionValue: 'bottom' } // Wanted: { duration: 3000, position: 'bottom' } const options = Object.keys(element.dataset) .filter(k => k.startsWith(prefix)) .reduce((prev, curr) => ({ ...prev, [curr.slice(prefix.length).replace(/(Value)$/, '')]: element.dataset[curr] }), {});Solo agrega
.toLowerCase()después
.replace(/(Value)$/, '')Aquí:
// Input: { toastDurationValue: 3000, toastPositionValue: 'bottom' } const options = Object.keys(element.dataset) .filter(k => k.startsWith(prefix)) .reduce((prev, curr) => ({ ...prev, [curr.slice(prefix.length).replace(/(Value)$/, '').toLowerCase()]: element.dataset[curr] }), {}); console.log(options);Producción:
{ duration: 3000, position: 'bottom' }El siguiente fragmento de código puede contribuir a su solución.
const obj = { toastDurationValue: 3000, toastPositionValue: 'bottom' } const prefix = 'toast'; Object.keys(obj).forEach(key => { obj[key] = obj[key.substring(0, key.lastIndexOf('Value')).replace(prefix, '').toLowerCase()] = obj[key]; delete obj[key]; }) console.log(obj);Esto se puede hacer en una declaración, de una manera elaborada (difícil de leer) usando slice() , replace() y toUpperCase() . La cadena original permanece como está:
let str = 'hellorandomWORDValue'; const prefix = 'hello'; const str2 = str.replace(prefix, "").slice(0,-5)[0].toUpperCase() + str.replace(prefix, "").slice(0,-5).slice(1) console.log(str); console.log(str2); slice(0,5) -> elimina las últimas 5 letras, por lo que básicamente elimina el sufijo Value .
replace(prefix,"") -> reemplaza las primeras instancias del prefix de cadena variable. Así que básicamente elimina el prefijo.
[0].toUpperCase() -> saca el primer carácter y lo convierte en mayúscula.
.slice(1) -> saca el resto de la cadena (desde el 1er índice). Básicamente, el resto de la cadena después del primer carácter.
const options = Object.keys(element.dataset) .filter(k => k.startsWith(prefix)) .reduce((prev, curr) => ({ ...prev, [curr.replace(prefix, "").slice(0,-5)[0].toUpperCase() + curr.replace(prefix, "").slice(0,-5).slice(1)]: element.dataset[curr] }), {});