我有一个包含数百个交易对象的数组,如下所示:
输入:
[{
"trades": {
"model": "Trades_Information"
"fields": {
"orderCloseTime": "2019-03-19T16:20:56",
"orderOpenPrice": "1.40000",
"orderClosePrice": "1.44000",
"orderProfit": "75",
"orderLots": "1.4"
},
[...]
}]
现在我想遍历所有对象,并将结果(包括循环中的一些计算)映射到新数组中,这些数组将更新Apexchart。
对我来说,目前最棘手的部分是动态获取正确的映射到过去12个月,因为每个新数组必须按照我如下创建的过去12个月数组的正确顺序包含值:
var date = new Date();
var lastMonths = [],
monthNames = ['Dec', 'Nov', 'Oct', 'Sep', 'Aug', 'Jul', 'Jun', 'May', 'Apr', 'Mar', 'Feb', 'Jan'];
for (var i = 0; i < 12; i++) {
lastMonths.push(monthNames[date.getMonth()]);
date.setMonth(date.getMonth() - 1);
}
console.log(lastMonths);
// ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
所以我不知怎么地,最终得到了这个简短的结构:
// Arrays needed for Apexchart
NetPipsMonth = [];
NetProfitMonth = [];
TotalVolumeMonth = [];
TotalTradesMonth = [];
lastMonths = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
// Loop all trades in trades-object
for (var i = 0; i < tradesTotal; i++) {
// Filter all trades by closed ones
closeTime = trades[i].fields.orderCloseTime;
if (closeTime != null) {
// Make some calculations that output one value per new array per trade object
// Push the results to each array in right order according to lastMonths array
// Mapping with `orderCloseTime`
}
}
我不知道如何通过orderCloseTime实现映射,以便将结果放在所需的数组中正确的位置。
我的想法是:为每个交易定义orderCloseTime的月份,并告诉JS使用lastMonths的顺序将其放置在新数组中的三月(上面的示例)处,并通过循环所有交易对象后增加其特定交易值的结果来得出月度总和。
lastMonths = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
NetProfitMonth = [ , , 75 , , ,];
TotalVolumeMonth = [ , , 1.4 , , ... ,];
- 可以创建一个嵌套对象,在循环过程中填充此对象,以便将所有值放入一个主对象中,并在循环结束后构建
apexchart所需的数组。 - 为每个月构建12x4循环,包含每个计算,并在之后对结果进行求和,以获得包含4个数组的月度汇总(这将导致大量代码)。
期待您的想法,祝假期愉快!
getMonth返回的是从0开始计数的月份。我以为它是从1开始计数的。 - Eldar