我正在一个带有Java后端的网站上,我正在创建图形,并使用从JSON作为数据从数据库拉到前端的数据。
一切正常,但是我现在试图获取每个数据点的总数,以便为该图添加一条额外的线以表示总数。
我在下面的循环旨在遍历一个包含对象的名为“系列”的列表,每个对象中的一个字段是一个数组(命名数据),该数组包含表示当天总销售额的数字。
var totalsArray = [];
//series is an array of objects
for(var q = 0; q < series.length; q++){
//data is an array found in each of those objects
for(var w = 0; w < series[q].data.length; w++){
totalsArray[w] += series[q].data[w];
}
}
但是,totalsArray最终充满了NaN。事情变得复杂的是,series.data []中可以包含不同数量的值。
仅需澄清一下:我试图获取每个对象数组中x位置的值,将它们加起来并存储在totalsArray的x位置。
谢谢大家是否需要进一步的帮助:)
我还使用console.log()查看series [q] .data [w],它们都是数字。
答案 0 :(得分:1)
@Pointy
你是个天才伴侣,正好把我整理出来:
let createThrottler (delay: TimeSpan) =
MailboxProcessor.Start(fun inbox ->
let rec loop (lastCallTime: DateTime option) =
async {
let! (chan: AsyncReplyChannel<_>) = inbox.Receive()
let sleepTime =
match lastCallTime with
| None -> 0
| Some time -> int((time - DateTime.Now + delay).TotalMilliseconds)
if sleepTime > 0 then
do! Async.Sleep sleepTime
let lastCallTime = DateTime.Now
chan.Reply()
return! loop(Some lastCallTime)
}
loop None)
let httpThrottler = createThrottler (TimeSpan.FromMilliseconds 1000.)
let httpRequestStringThrottled url =
async {
do! httpThrottler.PostAndAsyncReply id
return! httpRequestStringAsync url
}
// Test
[0..100] |> Seq.map (fun _ ->
let html = httpRequestStringThrottled "..." |> Async.RunSynchronize
html)
编辑:@Pointy如果您要点,请提出答案,我会接受
答案 1 :(得分:0)
以下是使用functional programming的答案:
//series is an array of objects
//data is an array found in each of those objects
totalsArray = series.map(s => (
s.data.reduce((t,d) => (t+=d), 0)
);
使用map
和reduce
而不是嵌套的for
循环。
reduce
方法的第二个参数会将总数初始化为零。