gpt4 book ai didi

javascript - 基于 json 到数组数组的日期的平均值

转载 作者:行者123 更新时间:2023-11-28 18:25:45 25 4
gpt4 key购买 nike

我犹豫是否要发布此内容,因为我没有取得重大进展。我可能应该离开一天。我正在尝试按日期计算平均值,以便在 HighStock 图表中使用。数据是json形式的。当我在同一天有两组数据时,就会出现问题,我需要根据日期对这些值进行平均。在给定的一天,可能有 0、1 或 2 个值。没有值的天数需要为 null 而不是 0,以便 highstock 将显示差距。我一直在尝试用js解决这个问题。从概念上讲,这似乎很容易;按日期分组,求和并除以长度。但我并没有取得很好的进步。这是fiddle没有我的错误。任何在正确方向上的帮助或插入都值得赞赏。

    {
"nfdrs": {
"row": [{
"@num": "141",
"sta_id": "350920",
"sta_nm": "HEHE 1",
"latitude": "44.9559",
"longitude": "-121.4991",
"nfdr_dt": "08\/10\/2016",
"nfdr_tm": "13",
"nfdr_type": "O",
"mp": "1",
"msgc": "7C2P2",
"one_hr": "5",
"ten_hr": "6",
"hu_hr": "11",
"th_hr": "10",
"xh_hr": "8",
"ic": "28",
"kbdi": "304",
"sc": "8",
"ec": "14",
"bi": "27",
"sl": "3-",
"lr": "0",
"lo": "0",
"hr": "0",
"ho": "0",
"fl": "19",
"hrb": "60",
"wdy": "78",
"adj": "M"
}, {
"@num": "142",
"sta_id": "352108",
"sta_nm": "WARM SPRINGS BASE",
"latitude": "44.7795",
"longitude": "-121.2501",
"nfdr_dt": "08\/10\/2016",
"nfdr_tm": "13",
"nfdr_type": "O",
"mp": "1",
"msgc": "7A2A2",
"one_hr": "5",
"ten_hr": "6",
"hu_hr": "8",
"th_hr": "8",
"xh_hr": "3",
"ic": "19",
"kbdi": "587",
"sc": "34",
"ec": "2",
"bi": "22",
"sl": "2",
"lr": "0",
"lo": "0",
"hr": "0",
"ho": "0",
"fl": "16",
"hrb": "5",
"wdy": "60",
"adj": "L"
},

以及,如何在包含所有代码的同时控制该代码示例的大小>

最佳答案

我猜你的主要问题是“我如何在两个不同的数据集上以语法方式执行 groupBy”。

有很多方法可以做到这一点。一种方法是使用 reduce 函数将 2 个数据集合并为一个完整的数据集。

示例:

function printAverage(data) {
for (var time in data) {
// Do ec
var ec_totalValue = 0;
data[time].ec_values.forEach(value => { ec_totalValue += value; });
var ec_average = ec_totalValue / data[time].ec_values.length;

// do erc
var erc_totalValue = 0;
data[time].erc_values.forEach(value => { erc_totalValue += value; });
var erc_average = erc_totalValue / data[time].erc_values.length;

console.log("Time => " + time + ", average EC => " + ec_average + ", average ERC =>" + erc_average);
}
}

function getEpochTime(dateStr) {
return Date.parse(dateStr);
}

function hasDataForDate(dataset, epochTime) {
return dataset.hasOwnProperty(epochTime);
}

function addValue(dataset, item) {
var epochKey = getEpochTime(item.nfdr_dt);
if (!hasDataForDate(dataset, epochKey)) {
dataset[epochKey] = {};
dataset[epochKey].ec_values = [];
dataset[epochKey].erc_values = [];
}
if (item.ec) dataset[epochKey].ec_values.push(parseInt(item.ec));
if (item.erc) dataset[epochKey].erc_values.push(parseInt(item.erc));

return dataset;
}

function groupRows(data) {
return data.reduce(addValue, {});
}

var data =
{
"nfdrs": {
"row": [
{
"@num": "141",
"sta_id": "350920",
"sta_nm": "HEHE 1",
"latitude": "44.9559",
"longitude": "-121.4991",
"nfdr_dt": "08\/10\/2016",
"nfdr_tm": "13",
"nfdr_type": "O",
"mp": "1",
"msgc": "7C2P2",
"one_hr": "5",
"ten_hr": "6",
"hu_hr": "11",
"th_hr": "10",
"xh_hr": "8",
"ic": "28",
"kbdi": "304",
"sc": "8",
"ec": "14",
"erc": "80",
"bi": "27",
"sl": "3-",
"lr": "0",
"lo": "0",
"hr": "0",
"ho": "0",
"fl": "19",
"hrb": "60",
"wdy": "78",
"adj": "M"
},
{
"@num": "142",
"sta_id": "352108",
"sta_nm": "WARM SPRINGS BASE",
"latitude": "44.7795",
"longitude": "-121.2501",
"nfdr_dt": "08\/10\/2016",
"nfdr_tm": "13",
"nfdr_type": "O",
"mp": "1",
"msgc": "7A2A2",
"one_hr": "5",
"ten_hr": "6",
"hu_hr": "8",
"th_hr": "8",
"xh_hr": "3",
"ic": "19",
"kbdi": "587",
"sc": "34",
"ec": "2",
"erc": "100",
"bi": "22",
"sl": "2",
"lr": "0",
"lo": "0",
"hr": "0",
"ho": "0",
"fl": "16",
"hrb": "5",
"wdy": "60",
"adj": "L"
}]
}
};

var grouped = groupRows(data.nfdrs.row);
printAverage(grouped);

本质上,代码的作用是循环遍历数据行并检查“合并数据集”是否已经定义了该键。

如果有,则代码只需将该行的值插入值数组即可。否则,它定义一个 JS {} 对象并将其添加到该键下,然后将行值推送给它。

有关 reduce 的更多示例用法及其含义。

参见:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

关于javascript - 基于 json 到数组数组的日期的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39196876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com