Tengo una variedad de objetos con claves dinámicas de países. Necesito obtener la clave del país y colocarla en una nueva matriz. La matriz puede contener claves más dinámicas con el nombre de los países.
const arr1 = [ { id: 1, label: 'CA', value: 9, Canada: 9, }, { id: 2, label: 'US', value: 7, 'United States': 7, }, { id: 3, label: 'AU', value: 5, Australia: 5, }, ]; const result = ['Canada', United States', 'Australia']Puede usar una lista negra para volcar todas las claves que no desea:
const arr1 = [ { id: 1, label: 'CA', value: 9, Canada: 9 }, { id: 2, label: 'US', value: 7, 'United States': 7 }, { id: 3, label: 'AU', value: 5, Australia: 5 }, ]; const blacklist = ['id', 'label', 'value']; const countryNames = arr1.map(row => Object.keys(row) .filter(key => !blacklist.includes(key))[0]); console.log(countryNames) Object.keys crea una matriz de claves para esa fila, luego filtro esas claves en la lista negra y devuelvo la primera entrada restante.
Puede usar flatMap para evitar obtener un valor undefined en el resultado cuando una clave no se adapta.
const data = [ { id: 1, label: 'CA', value: 9, Canada: 9, }, { id: 2, label: 'US', value: 7, 'United States': 7, }, { id: 3, label: 'AU', value: 5, Australia: 5, }, { id: 4, }, ]; const blacklistedKeys = ['id', 'label', 'value']; const result = data.flatMap(item => { const keys = Object.keys(item); const allowedKey = keys.find(key => !blacklistedKeys.includes(key)); return allowedKey ? [allowedKey] : []; }); console.log(result);Una lista negra se romperá si agrega más propiedades.
¿Te has planteado filtrar las que tienen la primera letra en mayúscula?
const countryNames = arr1.map(row => Object.keys(row) .filter(key => key[0] === key[0].toUpperCase())[0]);