【发布时间】:2017-10-03 10:49:10
【问题描述】:
在我开始之前,是的,我疯狂地用谷歌搜索并阅读了许多关于 SO 的答案,但我无法完成需要完成的工作,所以我正在寻求帮助。
我有一个我无法解决的问题。我必须在 Google Annotation 图表中显示一些数据。我得到的数据是这种格式:
var arr1 = [{
timestamp: "1505735024496", value1: 2
},
{
timestamp: "1505815355920", value1: 5
},
.....
]
var arr2 = [{
timestamp: "1505383687151", value2: 1
},
{
timestamp: "1505485417374", value2: 3
},
.....
]
这里的最终目标是将这两个对象数组组合成一个数组,如下所示:
var final = [
[new Date(YYYY, DD, MM), value1, value2],
[new Date(YYYY, DD, MM), value1, value2],
...
]
按照Google Charts documentation 上针对该特定图表的说明。
我只设法将时间戳转换为具有这些日期的相应值的完整日期,但这又给了我一个对象数组,我只是将时间戳转换为日期而没有太大变化。
var indexesArr1 = arr1.map(function (obj) {
return obj.timestamp;
});
var arr1New = arr1.map(function (obj) {
var index = indexesArr1.indexOf(obj.timestamp);
return { date: moment(parseInt(obj.timestamp)).format('YYYY, MM, DD'), value1: index > -1 ? arr1[index].value : obj.value };
});
这里真正的问题是 arr1 和 arr2 不必具有相同的长度(而且可能大部分时间都不会),并且由于此图表会随着时间的推移显示数据,因此在每个日期填充value1 和 value2,甚至认为其中一个值可能不会在特定日期显式返回。还有一件事是删除所有重复日期的实例,但保留最后一个,因为那个代表该特定日期的最后记录值。
我已经使用 Moment.js 轻松地将时间戳转换为所需的格式('YYYY,DD,MM'),但我无法正确处理所有数据。
允许使用Underscore.js,因为我知道它对这些类型的问题有一些很好的实用功能,但我就是没能解决它(说实话,没有太多经验)和我知道这里有人比我知识渊博,所以我正在寻求帮助。
提前感谢您抽出宝贵时间回答这个问题。
附:我会链接到 Moment.js,但目前我没有足够的声誉来发布超过 2 个链接。
【问题讨论】:
-
不管怎样,我真的不明白你想要做什么......我猜是直方图之类的东西?
-
@YvonneReinhardt 不,只是连接数组不是我要找的东西。查看我链接到的谷歌图表文档中的示例。不完全是直方图,而是我想说的价值时间线。您可以在金融图表上找到一些东西,例如您可以在一段时间内看到美元/欧元的价值。
标签: javascript arrays object google-visualization underscore.js