Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查json数组的数量并基于该数量生成序列_Javascript_Json_Fetch - Fatal编程技术网

Javascript 检查json数组的数量并基于该数量生成序列

Javascript 检查json数组的数量并基于该数量生成序列,javascript,json,fetch,Javascript,Json,Fetch,我通过以下函数接收JSON数据: function fecske4() { var url4 = 'https://api.coingecko.com/api/v3/coins/bitcoin/market_chart/range?vs_currency=' + valuta + '&from=' + monthAgo + '&to=' + currentTime; fetch( url4 )

我通过以下函数接收JSON数据:


      function fecske4() {
       
          var url4 = 'https://api.coingecko.com/api/v3/coins/bitcoin/market_chart/range?vs_currency=' + valuta + '&from=' + monthAgo + '&to=' + currentTime;
       fetch( url4 )
            .then(function (response) { return response.json(); })
            .then(function (data) { appendData4(data); });    setTimeout(fecske4, 20000); }; fecske4()

这很好,但我想简化将接收到的数据输入到折线图的过程。目前其手写体如下(在“系列”中):

这是可行的,但没有灵活性

我想检查json中有多少个对象,以获得数据价格点的确切数量,并根据该数量自动生成上面显示的“data.prices[0][1]”系列。我该怎么做

  • 另外,如何获取每4个数据点而不是全部数据点(获取全部数据点需要更长的处理时间,并使折线图看起来非常繁忙)

    • 要将点数减少到每四分之一,您可以使用
      过滤器

      let filteredPrices=data.prices.filter((项目,索引)=>index%4==0);
      
      然后,只需通过
      filteredPrices.length
      即可获得点数

      此外,如果您从不需要第一项价格,则可以仅使用第二项映射到新数组:

      let chartData=data.prices.map((项目)=>item[1]);
      
      您可以将这两个操作组合起来—首先过滤,然后映射。编辑以显示在何处包含此项:

      函数appendData4(数据){
      让chartData=data.prices
      .filter((项,索引)=>索引%4==0)
      .map((项)=>项[1]);
      新图表列表线(“#图表3”{
      系列:图表数据
      ...
      

      将此逻辑封装在自己的函数中是有意义的,比如
      prepareData
      或其他什么。

      这看起来很有希望,但在我的示例中,我并没有得到任何响应-我是否必须向其添加.prices,比如:data.prices.filter或..?请将其放在上面的示例片段中,这样我就可以看到如何用一个有效的exa来构造它了MPE?抱歉,是的,这取决于您的数据的结构,但听起来您需要
      数据。prices
      ,更正了答案。您能否添加一个片段,说明我将如何使用此映射和过滤数据替换“系列”中当前手写的数据?很抱歉,我是一个新手,JSONE编辑了我的答案以使示例更为完整。我会查看它!此外,我实际上需要所有价格,这是:数据。价格[0][1]是第一个价格,因为价格响应如下所示:时间戳,价格-因此我不需要数据。价格[0][0],因为这是时间戳而不是价格:)(所以第一个数字在数据中循环,第二个在时间戳和价格之间切换)
      
         function appendData4(data) {       
      
                     new Chartist.Line('#chart3', {
          
          series: [[ data.prices[0][1],data.prices[4][1],data.prices[9][1],data.prices[14][1],data.prices[19][1],data.prices[24][1],data.prices[29][1],data.prices[34][1],data.prices[39][1],data.prices[44][1],data.prices[49][1],data.prices[54][1],data.prices[59][1],data.prices[64][1],data.prices[69][1],data.prices[74][1],data.prices[79][1],data.prices[84][1],data.prices[89][1],data.prices[94][1],data.prices[99][1],data.prices[104][1],data.prices[109][1],data.prices[114][1],data.prices[119][1],data.prices[124][1]]]
                   
                   
        }, { fullWidth: true, 
             showPoint: false, 
             chartPadding: { top: 0, bottom: 0, left: 0, right: 0 },
             lineSmooth: true, 
             axisX: { showGrid: false, showLabel: false, offset: 0, position: 'start', }, 
             axisY: { showGrid: false, showLabel: false, offset: 0, position: 'start', },  } );    
       }