将列表重新格式化为分组结构
Reformat list to grouped structure
我在 SharePoint 中使用 knockout,我使用 getJSON 查询获取所有新闻列表的数据。我需要创建一个按时间顺序分组列表的侧边栏,其结构如下:年 -> 月 -> 新闻标题。
我已经设置了我的视图并且可以以 initialData 集中的格式显示所有数据。
你能帮我重新格式化这个列表吗:
var obj = [{
"Year":"2018",
"Month":"January",
"Title":"News 18 January 2018"
},
{...}];
对此观点:
var initialData =
[{
Year: "2018",
Months: [{
Month: "January",
News: [
{Title: "News 18 January 2018"},
{Title: "News 23 January 2018"}]
},
{Month: "February",
News: [{...}]},
]
},{ Year: "2017", Months: [{...}]
}]
我尝试 Object.keys 使用 forEach 循环、for 循环,但完全搞糊涂了。
您无法仅使用一个 forEach 循环或 Object.keys 来解决此问题。您将必须按多个键和多个级别对对象进行分组。
首先,构建一个以年月为键的对象,以便能够快速找到每个对象的匹配数组。然后将此 key-value 映射扩展为嵌套数组。
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,
};
})
};
})
};
});
我在 SharePoint 中使用 knockout,我使用 getJSON 查询获取所有新闻列表的数据。我需要创建一个按时间顺序分组列表的侧边栏,其结构如下:年 -> 月 -> 新闻标题。
我已经设置了我的视图并且可以以 initialData 集中的格式显示所有数据。
你能帮我重新格式化这个列表吗:
var obj = [{
"Year":"2018",
"Month":"January",
"Title":"News 18 January 2018"
},
{...}];
对此观点:
var initialData =
[{
Year: "2018",
Months: [{
Month: "January",
News: [
{Title: "News 18 January 2018"},
{Title: "News 23 January 2018"}]
},
{Month: "February",
News: [{...}]},
]
},{ Year: "2017", Months: [{...}]
}]
我尝试 Object.keys 使用 forEach 循环、for 循环,但完全搞糊涂了。
您无法仅使用一个 forEach 循环或 Object.keys 来解决此问题。您将必须按多个键和多个级别对对象进行分组。
首先,构建一个以年月为键的对象,以便能够快速找到每个对象的匹配数组。然后将此 key-value 映射扩展为嵌套数组。
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,
};
})
};
})
};
});