Javascript 检查json数组的数量并基于该数量生成序列
我通过以下函数接收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 )
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', }, } );
}