Tengo el siguiente objeto:
var colors = { key1:"Red", key2:"Blue", key3:"Green", key4:"Black" }También tengo esta matriz de claves:
var keys = ["key1","key3","key4"] Quiero obtener los colores correspondientes de colors . Para eso, he escrito un código:
keys.map((key)=>{ var color= colors.filter(x=>x==key); });Pero estoy recibiendo un error aquí:
colors.filter is not a functionPara extraer cada una de las claves, el map es la opción correcta, pero solo necesita obtener el valor correspondiente de los colors :
var colors= { key1:"Red", key2:"Blue", key3:"Green", key4:"Black" }; var keys = ["key1", "key3", "key4"]; const result = keys.map(key => colors[key]); console.log(result); Tenga en cuenta que si una clave no existe, la salida del valor es undefined . Para eliminar valores undefined , agregue .filter(Boolean) al final (gracias Roko C. Buljan ):
const result = keys.map(key => colors[key]).filter(Boolean); Su problema era que estaba tratando de ejecutar el filter en un objeto. filter no es un método sobre objetos, sino una matriz. Si desea usar filter , una opción es usar Object.entries así (pero la solución anterior es mucho más simple).
var colors= { key1:"Red", key2:"Blue", key3:"Green", key4:"Black" }; var keys = ["key1", "key3", "key4"]; const result = Object.entries(colors).filter(([key, color]) => keys.includes(key)).map(([, color]) => color); console.log(result);Por favor intenta lo siguiente:
var colors = { key1:"Red", key2:"Blue", key3:"Green", key4:"Black" } var keys = ["key1","key3","key4"] let a = keys.map((key)=>{ return colors[Object.keys(colors).filter(x=>x==key)]; });Podrías usar Array.prototype.reduce()
const colors = { key1:"Red", key2:"Blue", key3:"Green", key4:"Black" }; const keys = ["key1", "key3", "key4", "key99"]; const result = keys.reduce((a, k) => (colors[k]&&a.push(colors[k]), a), []); console.log(result) observe que la "key99" no se incluirá en la matriz de result