Escribí esto para convertir un objeto de tipo
{ 3: "#e3e3e3" }dentro
{ 3: {r: 227, g: 227, b: 227} }El código:
const colorMapInRgb = Object.fromEntries( Object.entries(colorMapInHex).map( ([value, hex]) => [value, hexToRgb(hex)] ) )¿Hay quizás una forma más idiomática de hacerlo? ¿Quizás una función de lodash?
Puede iterar a través de su objeto y convertir cada valor en un valor entero red , green y blue dentro de un array#map .
const input = { 3: "#e3e3e3", 'red': "#FF0000" }, result = Object.fromEntries( Object.entries(input).map(([key, value]) => { const [r, g, b] = value.substr(1,6).match(/..?/g).map(x => parseInt(x, 16)); return [key, {r, g, b}]; }) ); console.log(result); Otra solución usando array#reduce .
const input = { 3: "#e3e3e3", 'red': "#FF0000" }, result = Object.entries(input).reduce((o, [key, value]) => { const [r, g, b] = value.substr(1,6).match(/..?/g).map(x => parseInt(x, 16)); o[key] = {r, g, b}; return o; }, {}); console.log(result);Respuesta corta: No, no lo hay.
Respuesta larga: en realidad, todavía no hay una forma más idiomática de hacerlo, pero puede hacer lo mismo usando diferentes sintaxis/funciones con básicamente el mismo resultado:
const colorMapInRgb = {}; for (const key in colorMapInHex) colorMapInRgb[key] = hexToRgb(colorMapInHex[key]); // basically same as above const colorMapInRgb = {}; Object.keys(colorMapInHex).forEach(key => ...); // Reducing the entries into an object const colorMapInRgb = Object.entries(colorMapInHex) .reduce((result, [k, v]) => ({ ...result, [k]: hexToRgb(v) }), {}); // Reducing the entries into an object but reusing the same object const colorMapInRgb = Object.entries(colorMapInHex) .reduce((result, [k, v]) => (result[k] = hexToRgb(v), result), {});Una vez más, no hay realmente una mejor manera de hacerlo, es solo la sintaxis preferida.