对我来说,以排序的方式检索这些信息的最佳方式是什么
What is the best way for me to retrieve this information in a sorted manner?
情况:我有一段类似的代码
var DealsByMonth = {};
for (var region in this.DealsByRegion) {
this.DealsByRegion[region].forEach(function (deal) {
// deal.Created is in form like "2015-05-04T08:26:38Z"
var parts = deal.Created.split('-'),
monthstr = [parseInt(parts[1]), parseInt(parts[0])].join("/");
if (DealsByMonth[monthstr] !== undefined) {
++DealsByMonth[monthstr]
} else {
DealsByMonth[monthstr] = 0;
}
});
}
console.log(DealsByMonth); // TEST
var line_data = {
labels: [],
datasets: [
{
label: "MSfC Deals - Month by Month",
fillColor: "rgba(220,220,220,0.2)",
strokeColor: "rgba(220,220,220,1)",
pointColor: "rgba(220,220,220,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: []
}
]
};
for ( var key in DealsByMonth )
{
line_data.labels.push(key);
line_data.data.push(DealsByMonth[key]);
}
打印的是像这样的对象
{1/2015: 6, 2/2015: 14, 3/2015: 15, 4/2015: 24, 5/2015: 33, 6/2015: 16, 7/2015: 14, 8/2015: 22, 9/2015: 29, 10/2014: 41, 11/2014: 9, 11/2015: 14, 12/2014: 1, 12/2015: 32}
我需要从该对象中提取关键点,但我需要按的顺序遍历它们,因为我使用它们来绘制折线图。要么我需要按顺序遍历它们,要么我需要重做我的代码,使它们处于已经有序的数据结构中。
在优雅、高效、可读性等方面,正确的方法是什么。?
在我的脑海中,对密钥进行排序,然后使用排序顺序
Object.keys(DealsByMonth).sort(function(a, b) {
var sa = a.split('/'); // index 0 = month, 1 = year
var sb = b.split('/');
var index = (sa[1] == sb[1]) ? 0 : 1; // if year is same, compare months
return parseFloat(sa[index]) - parseFloat(sb[index]);
}).forEach(function(key) {
line_data.labels.push(key);
line_data.data.push(DealsByMonth[key]);
});
类似于这个答案,
multiSort(DealsByMonth);
function multiSort(object) {
var months = Object.keys(object);
months.sort(function(a, b) {
var m1 = a.split('/')[0];
var m2 = b.split('/')[0];
var y1 = a.split('/')[1];
var y2 = b.split('/')[1];
if (y1 < y2) return -1;
if (y1 > y2) return 1;
if (parseInt(m1) < parseInt(m2)) return -1;
if (parseInt(m1) > parseInt(m2)) return 1;
return 0;
});
var reorderedObj = {};
for (var i = 0; i < months.length; i++) {
reorderedObj[months[i]] = object[months[i]];
}
return reorderedObj;
}
如果您希望数据在对象中正确排序,您应该以正确比较的方式(您希望的方式)保留键。当比较两个日期时,首先要比较的是它们的年份、月份和日期。在您的代码中,您保留了年前的一个月,例如:"1/2015"
,如果您希望它正确排序,这是不正确的,因为基于这种格式,"4/2014"
位于"1/2015"
之后,这不是您想要的。
所以我建议你把年份放在前面,把月份放在后面,改变:
monthstr = [parseInt(parts[1]), parseInt(parts[0])].join("/");
至:
monthstr = [parseInt(parts[0]), parseInt(parts[1])].join("/");
相关文章:
- 聊天-获取新信息的最佳方式
- 将敏感信息传递给iframe的安全方式
- WinJS:保存重要信息的最佳方式
- 是否可以以编程方式打开谷歌地图POI信息窗口
- 使用标记和 (TXT) .dat 文件中追加信息的最佳方式.从窗体
- 谷歌地图点击,如何以编程方式获取点击点信息并添加图钉
- 使用 ajax 将文本区域信息存储到数据库中.除非我以任何方式编辑文本区域,否则工作正常.信息仍然被存储,但XMLHTT
- 创建谷歌地图自定义信息窗口的当前方式
- 获取浏览器信息的任何其他方式,而不是检索UserAgent
- 获取有关触发特定事件的元素的信息的标准方式
- 对我来说,以排序的方式检索这些信息的最佳方式是什么
- 以编程方式更改html页面的页眉信息
- 将JS/css信息传递到表单的最佳方式
- 客户端存储/获取信息的最佳方式
- 在网页上显示xml信息的最佳方式是什么
- 用户输入列表使用HTML加上一种处理信息的方式
- 向网站访问者显示一次性欢迎信息的最佳方式是什么
- 保存哈希信息的最佳方式
- 什么是最好的方式来创建饼状图和其他动画动态信息图形
- 在bootstrap或其他jquery对话框中显示各种信息的最佳方式