Tengo dos conjuntos de elementos, uno contiene una lista de números y el segundo de nombres. algo como esto.
A: 4, B: 3, C: 2, A: 5, C: 3, Y mi tarea es encontrar elementos con el valor más pequeño y el valor más alto. Sé que podría crear una matriz de objetos y ordenarlos con el mapa [{A: 4},{C:2}....] Pero me preguntaba si hay formas eficientes de hacerlo. En lugar de crear un objeto have, use tres bucles. ¿Sería posible reemplazarlo con algo más eficiente? Como set o algo donde podría simplemente llamar a set.getItemWithMinValue, set.getItemWithMaxValue y el retorno sería: C:2, A:5
Perdón por la pregunta tonta, todavía estoy aprendiendo.
Esta sería una forma de hacerlo. Precaución: la matriz se cambiará (ordenará) en el transcurso del script.
const arr=[{A: 4},{B: 3},{C: 2},{A: 5},{C: 3}], val=o=>Object.values(o)[0]; arr.sort((a,b)=>val(a)-val(b)); console.log(arr[0],arr[arr.length-1])Vas a tener que hacer un bucle, analizar el objeto en sus valores y verificar si el valor es mayor o menor.
var data = [ { A: 4 }, { B: 3 }, { C: 2 }, { A: 5 }, { C: 3 }, ]; const results = data.reduce((minMax, item) => { const value = Object.values(item)[0]; if (!minMax) { minMax = { min: { value, item }, max: { value, item }, } } else if (minMax.min.value > value) { minMax.min = { value, item }; } else if (minMax.max.value < value) { minMax.max = { value, item }; } return minMax; }, null); console.log(results.min.item); console.log(results.max.item);Podría tomar un solo bucle para obtener las entradas del objeto.
Este enfoque espera solo un valor mínimo y máximo único.
const array = [{ A: 4 }, { B: 3 }, { C: 2 }, { A: 5 }, { C: 3 }]; let min, max; for (const object of array) { const [[k, v]] = Object.entries(object); if (!min || min[1] > v) min = [k, v]; if (!max || max[1] < v) max = [k, v]; } console.log('min', Object.fromEntries([min])); console.log('max', Object.fromEntries([max]));Este enfoque respeta más de un nombre con el mismo valor mínimo o máximo.
const array = [{ A: 4 }, { B: 3 }, { C: 2 }, { A: 5 }, { C: 3 }, { F: 2 }]; let min, max; for (const object of array) { const v = Object.values(object)[0]; if (!min || min[1] > v) min = [[object], v]; else if (min[1] === v) min[0].push(object); if (!max || max[1] < v) max = [[object], v]; else if (max[1] === v) max[0].push(object); } console.log('min', min[0]); console.log('max', max[0]);