¿Cómo obtener valores distintos de una serie de objetos en JavaScript?
Suponiendo que tengo lo siguiente:
var array =
[
{"name":"Joe", "age":17},
{"name":"Bob", "age":17},
{"name":"Carl", "age": 35}
]
¿Cuál es la mejor manera de poder obtener una variedad de todas las edades distintas de modo que obtenga una variedad de resultados de:
[17, 35]
¿Hay alguna manera de que pueda estructurar alternativamente los datos o un método mejor de modo que no tenga que iterar a través de cada matriz verificando el valor de "edad" y comparar su existencia con otra matriz, y agregarla si no?
Si hubiera alguna manera de poder extraer las distintas edades sin iterar...
Manera ineficiente actual que me gustaría mejorar... Si eso significa que en lugar de que "matriz" sea una matriz de objetos, sino un "mapa" de objetos con alguna clave única (es decir, "1,2,3"), eso sería está bien también. Solo estoy buscando la forma más eficiente en cuanto a rendimiento.
Lo siguiente es cómo lo hago actualmente, pero para mí, la iteración parece ser mala para la eficiencia a pesar de que funciona...
var distinct = []
for (var i = 0; i < array.length; i++)
if (array[i].age not in distinct)
distinct.push(array[i].age)
Si estás utilizando ES6/ES2015 o posterior, puedes hacerlo de esta manera:
const data = [
{ group: 'A', name: 'SD' },
{ group: 'B', name: 'FI' },
{ group: 'A', name: 'MM' },
{ group: 'B', name: 'CO'}
];
const unique = [...new Set(data.map(item => item.group))]; // [ 'A', 'B']
Aquí hay un ejemplo de cómo hacerlo.
Para aquellos que quieran devolver un objeto con todas las propiedades únicas por clave
const array =
[
{ "name": "Joe", "age": 17 },
{ "name": "Bob", "age": 17 },
{ "name": "Carl", "age": 35 }
]
const key = 'age';
const arrayUniqueByKey = [...new Map(array.map(item =>
[item[key], item])).values()];
console.log(arrayUniqueByKey);
/*OUTPUT
[
{ "name": "Bob", "age": 17 },
{ "name": "Carl", "age": 35 }
]
*/
// Note: this will pick the last duplicated item in the list.