如何仅从 JSON 数据中获取最后 10 个对象

Posted

技术标签:

【中文标题】如何仅从 JSON 数据中获取最后 10 个对象【英文标题】:How to get the last 10 objects only from JSON data 【发布时间】:2018-11-28 13:04:09 【问题描述】:

我有一个 .json 文件,我只想使用图形高度图从这个 json 文件中获取最后 10 个对象。

我的问题是脚本正在从数组中获取完整的对象,而我只想获取最后 10 个对象...

已修复

我的代码是这样的:

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>

<div id="container"></div>
<script>
$.getJSON('https://cdn.rawgit.com/highcharts/highcharts/057b672172ccc6c08fe7dbb27fc17ebca3f5b770/samples/data/usdeur.json',
  function (data) 

   var currentValue = 0.9345;

    Highcharts.chart('container', 
      chart: 
        zoomType: 'x'
      ,
      title: 
        text: 'USD to EUR exchange rate over time'
      ,
      subtitle: 
        text: document.ontouchstart === undefined ?
            'Click and drag in the plot area to zoom in' : 'Pinch the chart to zoom in'
      ,
      xAxis: 
        type: 'datetime'
      ,
      yAxis: 
            title: 
              text: 'Exchange rate'
            ,
            plotLines: [
                value: currentValue,
                color: 'green',
                dashStyle: 'Dot',
                width: 1,
                label: 
                    text: currentValue,
                    textAlign: 'left',
                    x: -45
                
            ]
        ,
      legend: 
        enabled: false
      ,
      plotOptions: 
        area: 
          fillColor: 
            linearGradient: 
              x1: 0,
              y1: 0,
              x2: 0,
              y2: 1
            ,
            stops: [
              [0, Highcharts.getOptions().colors[0]],
              [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]
            ]
          ,
          marker: 
            radius: 2
          ,
          lineWidth: 1,
          states: 
            hover: 
              lineWidth: 1
            
          ,
          threshold: null
        
      ,

      series: [
        type: 'area',
        name: 'USD to EUR',
        data: data
      ]
    );
  
);
</script>

如果有人可以帮助我,那就太好了:)

【问题讨论】:

【参考方案1】:

这很简单,只获取 json array 的最后一个 10 项,您可以使用 Array.filter() method 根据索引对其进行过滤,如下所示:

var last10 = data.filter(function(el, index) 
  return index >= data.length - 10;
);

您只需使用 index &gt;= data.length - 10 过滤具有最后 10 个索引的项目。

演示:

在您的情况下,您只需要过滤 data 数组并将新过滤的 array 传递给图表:

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>

<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
<script>
  $.getJSON(
    'https://cdn.rawgit.com/highcharts/highcharts/057b672172ccc6c08fe7dbb27fc17ebca3f5b770/samples/data/usdeur.json',
    function(data) 

      var last10 = data.filter(function(el, index) 
        return index >= data.length - 10;
      );

      Highcharts.chart('container', 
        chart: 
          zoomType: 'x'
        ,
        title: 
          text: 'USD to EUR exchange rate over time'
        ,
        subtitle: 
          text: document.ontouchstart === undefined ?
            'Click and drag in the plot area to zoom in' : 'Pinch the chart to zoom in'
        ,
        xAxis: 
          type: 'datetime'
        ,
        yAxis: 
          title: 
            text: 'Exchange rate'
          
        ,
        legend: 
          enabled: false
        ,
        plotOptions: 
          area: 
            fillColor: 
              linearGradient: 
                x1: 0,
                y1: 0,
                x2: 0,
                y2: 1
              ,
              stops: [
                [0, Highcharts.getOptions().colors[0]],
                [1, Highcharts.Color(Highcharts.getOptions().colors[0]).setOpacity(0).get('rgba')]
              ]
            ,
            marker: 
              radius: 2
            ,
            lineWidth: 1,
            states: 
              hover: 
                lineWidth: 1
              
            ,
            threshold: null
          
        ,

        series: [
          type: 'area',
          name: 'USD to EUR',
          data: last10
        ]
      );
    
  );
</script>

【讨论】:

你能帮我把它应用到我的脚本中吗? @FullDISK 是的,当然,在这里,只需传递last10 数组而不是data,就可以了。我编辑了答案。 抱歉,我现在发现脚本正在获取第一个值,而不是最后一个写入 json 文件的值。有什么办法可以恢复订单? @FullDISK 这怎么可能?!通常这应该取最后一个 10 项目,很可能是你的 json 被反转了,在这种情况下你可以将条件更改为:return index &lt; 10; 是的,你是对的 :) 无论如何感谢最后一个例子 ;)

以上是关于如何仅从 JSON 数据中获取最后 10 个对象的主要内容,如果未能解决你的问题,请参考以下文章

如何仅从 JSON 文件导入不和谐?

尝试从 JSON 中获取最后 5 个对象时出现 TypeError

如何使用 LINQ 仅从实体加载最后一条记录?

如何使用postgresql从字段中获取最后10位数字

如何仅从数据库查询中获取前 4 个结果

如何仅从 React 中的 API 获取第一个数据?