Quiero un trazador de líneas pequeño y agradable para usar una matriz, por ejemplo ['postcode','town'] , y luego extraer solo estas propiedades de un objeto más grande.
Así que esto:
const fields = ['postcode','town']; const obj = { name: 'test', postcode: 'SS2 5JJ', town: 'Somewhere', other: 'info' }se convertiría en esto:
const filtered = { postcode: 'SS2 5JJ', town: 'Somewhere', }Encontré esto, sin embargo, lo he entendido mal, creo:
const fields = ['postcode','town']; Object.keys(fields).map(e => fields[e])¿Cuál es la mejor manera de hacer esto?
Podrías usar Array.reduce
const fields = ['postcode', 'town']; const obj = { name: 'test', postcode: 'SS2 5JJ', town: 'Somewhere', other: 'info' }; const filteredObj = fields.reduce((acc, cur) => Object.assign(acc, { [cur]: obj[cur] }), {}); console.log(filteredObj);Puede asignar los fields de su matriz a [key, value] lo que creará una matriz de pares [key, value] . Una vez que tenga esta matriz, puede usar Object.fromEntries() para construir su objeto para cada par clave-valor:
const fields = ['postcode','town']; const obj = { name: 'test', postcode: 'SS2 5JJ', town: 'Somewhere', other: 'info' }; const res = Object.fromEntries(fields.map(key => [key, obj[key]])); console.log(res);"Mejor" es, por supuesto, un concepto subjetivo. Pero creo que la función de reducción es la forma más limpia de hacerlo. De esa manera no hay necesidad de encadenar diferentes funciones.
const filtered = fields.reduce((prev, key) => ({[key]: obj[key], ...prev}), {});