ideeps
ideeps

Reputation: 399

Maximum value from the JSON

I needed the maximum value from the particular JSON object. I needed it to make a scale for apple and banana's for d3 from its maximum value

So how do I get the maximum value of apple and banana from this JSON. I don't need the month name. I don't want to use any for or while loops.

var arr = [ { "date":"Jan", "values": [ {"name":"apple","value":100}, {"name":"banana","value":200} ] }, { "date":"Feb", "values": [ {"name":"apple","value":300}, {"name":"banana","value":455} ] }, { "date":"Mar", "values": [ {"name":"apple","value":588}, {"name":"banana","value":700} ] } ];

Upvotes: 1

Views: 65

Answers (2)

slider
slider

Reputation: 12990

You can also use Math.max after finding the fruit from values with find:

var arr = [{
    "date": "Jan",
    "values": [{
        "name": "apple",
        "value": 100
      },
      {
        "name": "banana",
        "value": 200
      }
    ]
  },
  {
    "date": "Feb",
    "values": [{
        "name": "apple",
        "value": 300
      },
      {
        "name": "banana",
        "value": 455
      }
    ]
  },
  {
    "date": "Mar",
    "values": [{
        "name": "apple",
        "value": 588
      },
      {
        "name": "banana",
        "value": 700
      }
    ]
  }
];

const maxVal = (fruit) => Math.max(...arr.map(d => d.values.find(v => v.name === fruit).value));

console.log(maxVal('apple'));
console.log(maxVal('banana'));

Upvotes: 3

customcommander
customcommander

Reputation: 18921

You could something like this:

const max = (list) => list.reduce((acc, cur) => {
  let apple = cur.values[0].name === 'apple' ? cur.values[0] : cur.values[1];
  let banana = cur.values[0].name === 'banana' ? cur.values[0] : cur.values[1];
  acc[0] = acc[0] < apple.value ? apple.value : acc[0];
  acc[1] = acc[1] < banana.value ? banana.value : acc[1];
  return acc;
}, [0, 0]);

It returns an array, the first item is the max number of apples, the second is the max number of bananas.

Example

var arr = [{
    "date": "Jan",
    "values": [{
        "name": "apple",
        "value": 100
      },
      {
        "name": "banana",
        "value": 200
      }
    ]
  },
  {
    "date": "Feb",
    "values": [{
        "name": "apple",
        "value": 300
      },
      {
        "name": "banana",
        "value": 455
      }
    ]
  },
  {
    "date": "Mar",
    "values": [{
        "name": "apple",
        "value": 588
      },
      {
        "name": "banana",
        "value": 700
      }
    ]
  }
];

const max = (list) => list.reduce((acc, cur) => {
  let apple = cur.values[0].name === 'apple' ? cur.values[0] : cur.values[1];
  let banana = cur.values[0].name === 'banana' ? cur.values[0] : cur.values[1];
  acc[0] = acc[0] < apple.value ? apple.value : acc[0];
  acc[1] = acc[1] < banana.value ? banana.value : acc[1];
  return acc;
}, [0, 0]);

console.log(
  max(arr)
);

Upvotes: 0

Related Questions