我使用淘汰赛与SharePoint,我使用getJSON查询获取所有新闻列表的数据。我需要创建一个带有按时间顺序排列的列表的侧栏,其结构如下:Year - >月 - >新闻标题。
我已经设置了我的视图,并且可以以initialData设置的格式显示所有数据。
请你帮我重新格式化这个清单:
List
这个观点:
var obj = [{
"Year":"2018",
"Month":"January",
"Title":"News 18 January 2018"
},
{...}];
我尝试使用forEach循环的Object.keys,for循环,但完全混淆。
答案 0 :(得分:1)
只能使用一个forEach循环或Object.keys来解决这个问题。您必须在多个键和多个级别上对对象进行分组。
首先,构建一个以年和月为关键字的对象,以便能够快速找到每个对象的匹配数组。然后将此键值映射扩展为嵌套数组。
var years = {};
obj.forEach(function(o) {
years[o.Year] = years[o.Year] || { months: {} };
years[o.Year].months[o.Month] = years[o.Year].months[o.Month] || [];
years[o.Year].months[o.Month].push(o.Title);
});
var initialData = Object.keys(years).map(function(year) {
return {
Year: year,
Months: Object.keys(years[year].months).map(function(month) {
return {
Month: month,
News: years[year].months[month].map(function(title) {
return {
Title: title,
};
})
};
})
};
});