JSON的最大值

时间:2018-12-02 00:59:54

标签: javascript json d3.js

我需要特定JSON对象的最大值。我需要它从最大值开始为苹果和香蕉的d3缩放比例。

那么我如何从这个JSON中获取苹果和香蕉的最大值。我不需要月份名称。我不想使用任何for或while循环。

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} ] } ];

2 个答案:

答案 0 :(得分:3)

使用Math.maxvalues找到水果后,您也可以使用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'));

答案 1 :(得分:0)

您可以这样:

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]);

它返回一个数组,第一个是苹果的最大数量,第二个是香蕉的最大数量。

示例

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)
);