Tengo una lista de objetos que contienen una matriz como uno de los valores así:
const obj_arr = [ {'key': ['value-1', 'value-2', 'value-3', 'value-2', 'value-3']}, {'key': ['value-3', 'value-1', 'value-2', 'value-1', 'value-3']}, {'key': ['value-2', 'value-1', 'value-4', 'value-3', 'value-5']} ];¿Cómo tomo esta lista de valores y mapeo solo los elementos únicos a una matriz?
hasta ahora he sido capaz de hacer esto:
const obj_arr = [{ 'key': ['value-1', 'value-2', 'value-3', 'value-2', 'value-3'] }, { 'key': ['value-3', 'value-1', 'value-2', 'value-1', 'value-3'] }, { 'key': ['value-2', 'value-1', 'value-4', 'value-3', 'value-5'] } ]; let unique_arr = [...new Set(obj_arr.map(record => record['key']))]; console.log(unique_arr); /* let unique_arr2 = [...new Set(obj_arr.flatMap(record => record['key']))]; console.log('using guidance from Barmar: ', unique_arr2); */ .as-console-wrapper { max-height: 100% !important; top: 0 }pero esto solo me devuelve cada matriz única como esta:
unique_arr = [ ['value-1', 'value-2', 'value-3', 'value-2', 'value-3'], ['value-3', 'value-1', 'value-2', 'value-1', 'value-3'], ['value-2', 'value-1', 'value-4', 'value-3', 'value-5'] ]lo que realmente necesito es esto:
unique_arr = ['value-1', 'value-2', 'value-3', 'value-4', 'value-5']No se si este es el resultado que buscas aquí hay una solución con reduce
let uniqueArrReduce = [...new Set(obj_arr.reduce((acc, el) => [...acc, ...el.key], []) )]con mapa y plano
let uniqueArrMapFlat = [...new Set(obj_arr.map(el => el.key).flat())]Podría mapear los valores de los objetos y obtener una matriz plana para el constructor.
const array = [{ key: ['value-1', 'value-2', 'value-3', 'value-2', 'value-3'] }, { key: ['value-3', 'value-1', 'value-2', 'value-1', 'value-3'] }, { key: ['value-2', 'value-1', 'value-4', 'value-3', 'value-5'] }], unique = [...new Set(array.map(Object.values).flat(Infinity))]; console.log(unique);