Tengo una matriz json anidada y estoy tratando de obtener el valor máximo del atributo de puntos en esta matriz.
data = { "name": "KSE100", "children": [ { "name": "TECHNOLOGY & COMMUNICATION", "children": [ { "name": "TRG", 'points': -21 }, { "name": "SYS", }, ] }, { "name": "OIL", "children": [ { "name": "PPL", 'points': 9 }, { "name": "PSO", 'points': -19 }, ] }, ] }Quiero el valor máximo de puntos de las secciones de niños. Me refiero a los sectores de tecnología y petróleo.
Lo que he hecho hasta ahora :
var max; for (var i in data.children.length) { for (var j in data.data[i]) { var point = data.data[i].children[j] } }Prueba lo siguiente:
data = { "name": "KSE100", "children": [ { "name": "TECHNOLOGY & COMMUNICATION", "children": [ { "name": "TRG", 'points': -21 }, { "name": "SYS", }, ] }, { "name": "OIL", "children": [ { "name": "PPL", 'points': 9 }, { "name": "PSO", 'points': -19 }, ] }, ] } var array = []; for (var first of data.children) { for (var second of first.children) { if(second.points != undefined) { array.push(second); } } } var maximumValue = Math.max.apply(Math, array.map(function(obj) { return obj.points; })); console.log(maximumValue);No estaba 100 % seguro de cuál es su objetivo exacto, así que incluí un valor máximo agrupado y un valor máximo general con un ligero enfoque funcional.
Tenga en cuenta que algunas funcionalidades no funcionan en navegadores más antiguos, por ejemplo flatMap . De todos modos, esto debería ayudarlo a comenzar y seguir adelante.
const data = { name: "KSE100", children: [ { name: "TECHNOLOGY & COMMUNICATION", children: [ { name: "TRG", points: -21, }, { name: "SYS", }, ], }, { name: "OIL", children: [ { name: "PPL", points: 9, }, { name: "PSO", points: -19, }, ], }, ], }; const maxPointsByGroup = data.children.reduce( (acc, entry) => [ ...acc, { name: entry.name, max: Math.max( ...entry.children .map((entry) => entry.points) .filter((entry) => typeof entry === "number") ), }, ], [] ); console.log("grouped max:", maxPointsByGroup); const overallMax = Math.max( ...data.children .flatMap((entry) => entry.children.flatMap((entry) => entry.points)) .filter((entry) => typeof entry === "number") ); console.log("overall max:", overallMax);puede usar el método de reducción en el objeto de matriz para hacer esto
const maxValues = [] data.children.forEach(el => { if (el.name === 'OIL' || el.name === 'TECHNOLOGY & COMMUNICATIO'){ const max = el.children.reduce((current, previous) => { if (current.points > previous.points) { return current } }, 0) maxValues.append({name: el.name, value: max.points}) } })Esto le dará una matriz de objetos con el nombre y el valor máximo.