所以我正在处理我之前提出的问题 here,其中我谈到了使用AngularJS从JSON文件创建历史时间轴。本质上,JSON文件包含一堆HISTORY EVENTS对象,每个对象都包含一个名为“theDate”的ID,用于指示这些唯一事件发生的日期。我想将所有事件排序到特定的DECADES中,以便稍后在视图中使用CSS进行导航。
我正在努力创建一个多维数组,其结构应该是这样的(这应该是MASTER数组):
[[all of 1960s events],[all of 1970s events], [all of 1980s events]...]
...其中MASTER数组中的每个特定数组都包含该特定十年的事件对象。 (例如,对于20世纪60年代的数组,事件应包含年份[ 1961, 1963, 1969,etc.]
。
使用AngularJS,我的工作代码在这里:
var events = $scope.events;
function decadeSort(){
var year;
var arrayOfYears = [];
for(var i = 0; i<events.length; i++){
var date = new Date(events[i].theDate);
year = date.getFullYear();
var yearToString = year.toString();
var yearToDecade = yearToString.substring(0,3).concat("0");
arrayOfYears.push(yearToDecade);
}
console.log(arrayOfYears);
};
decadeSort();
arrayOfYears
数组根据各自的DECADE打印出267个事件对象的所有YEAR,如下所示:
["1960","1960","1970","1970","1970","1980","1980","1990","1990","2000","2000"..]
由于THAT数组中的一些字符串对象重复,我希望根据哪些对象是相同的字符串来创建新的数组WITHIN。我不知道如何编写这个循环,所以任何见解和帮助都会非常感激。
非常感谢你!
答案 0 :(得分:1)
使用您发布的示例事件,以下是分组十年的简单方法:
var grouped = {};
events.forEach(function (event) {
var decade = Math.floor((new Date(event.theDate)).getFullYear() / 10) * 10;
if (typeof grouped[decade] === 'undefined') {
grouped[decade] = [];
}
grouped[decade].push(event);
});
console.log(grouped);
如果您的目标是不支持浏览器,则可能需要更改forEach
。