如何使用IndexString对Javascript数组进行排序,例如:a ['String']

时间:2017-03-20 04:03:11

标签: javascript arrays sorting

我有一个像这样的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”..

有什么办法吗?

2 个答案:

答案 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);