我有一个像这样的JS阵列
CDate['1997-02-11']={dc: 3, da: 1, dm: 4};
CDate['1998-03-18']={dc: 6, da: 1, dm: 1};
CDate['1999-02-1']={dc: 4, da: 1, dm: 0};
CDate['2001-02-11']={dc: 1, da: 1, dm: 4};
CDate['2000-02-11']={dc: 3, da: 1, dm: 4};
CDate['1985-03-18']={dc: 6, da: 1, dm: 1};
CDate['1999-02-1']={dc: 4, da: 1, dm: 0};
并且我正在使用此CDates来将数据拆分为4个数组,用于图形
for(var Dt in cDate)
{ console.log(Dt);
chDate.push(Dt);
chDa.push(cDate[Dt].da);
chDm.push(cDate[Dt].dm);
chDc.push(cDate[Dt].dc);
};
并且在控制台中我可以看到日期打印不是排序的。所以我的图表没有按时间顺序查看。我搜索有很多函数来对键或属性值排序数组,而不是排序“KEY”或“INDEX”..
有什么办法吗?
答案 0 :(得分:1)
有几点意见:
CDate
不是数组,它是一个对象。 JavaScript中的对象属性未排序,您不能在对象中重复键(与键1999-02-1
一样)。Object.keys()
获取对象的密钥。Array.prototype.sort()
方法但对键进行排序,因为日期的格式如何,自然(词法)排序顺序不合适(例如{{1} }将在2017-01-10
之前结束
在下面的代码中,我更正了日期格式。如果您无法更正日期格式,则必须编写自己的排序逻辑。
2017-02-2

答案 1 :(得分:1)
var CDate = [];
var chDate = [];
var chDa = [];
var chDm = [];
var chDc = [];
CDate['1997-02-11']={dc: 3, da: 1, dm: 4};
CDate['1998-03-18']={dc: 6, da: 1, dm: 1};
CDate['1999-02-1']={dc: 4, da: 1, dm: 0};
CDate['2001-02-11']={dc: 1, da: 1, dm: 4};
CDate['2000-02-11']={dc: 3, da: 1, dm: 4};
CDate['1985-03-18']={dc: 6, da: 1, dm: 1};
CDate['1999-02-1']={dc: 4, da: 1, dm: 0};
var sortedData = Object.keys(CDate).sort();
for (var index = 0; index < sortedData.length; index++) {
var data = CDate[sortedData[index]];
console.log(data);
chDate.push(data);
chDa.push(data.da);
chDm.push(data.dm);
chDc.push(data.dc);
}
console.log(chDate);
console.log(chDa);
console.log(chDm);
console.log(chDc);