Javascript 基于年和月字段创建对象
我有一个对象数组Javascript 基于年和月字段创建对象,javascript,Javascript,我有一个对象数组条目,其中对象的键为年和月。我想重新构造数组,以便在顶层将同一年的条目分组在一起,并将同一年同一月份的条目分组在一个数组中。像这样的 { 2020:{ "January": [objJan1, ObjJan2, ...], "June": [objJune1, ObjJune2, ...], }, 2019:{ "April": [objApril1, ObjApril2, ..
条目
,其中对象的键为年
和月
。我想重新构造数组,以便在顶层将同一年的条目分组在一起,并将同一年同一月份的条目分组在一个数组中。像这样的
{
2020:{
"January": [objJan1, ObjJan2, ...],
"June": [objJune1, ObjJune2, ...],
},
2019:{
"April": [objApril1, ObjApril2, ...],
"July": [objJul1, ObjJul2, ...],
},
...
}
我试过这个
let entriesByYearMonth = {};
entries.forEach((entryEl) => {
const entryElYear = entryEl.year.toString();
const entryElMonth = entryEl.month.toString();
console.log(Object.keys(entriesByYearMonth), typeof entryElYear);
if (entryElYear in Object.keys(entriesByYearMonth)) {
let entriesByYear = entriesByYearMonth[entryElYear];
if (entryElMonth in Object.keys(entriesByYear)) {
entriesByYear[entryElMonth] = [];
} else {
entriesByYear[entryElMonth].push(entryEl);
}
} else {
entriesByYearMonth[entryElYear] = { [entryElMonth]: [entryEl] };
}
});
但是代码不会为同一年的下一个条目输入if语句if(Object.keys中的entryElYear(entriesByYearMonth))
,尽管entryElYear
是string类型,而Object.keys(entriesByYearMonth)
是字符串数组。我不知道为什么?我做错了什么
编辑:
条目的结构
[
{
key1: ...,
..
year: 2020,
month: "December",
...
},
{
key11: ...,
..
year: 2020,
month: "December",
...
},
{
key12: ...,
..
year: 2019,
month: "January",
...
},
...
]
按减速机,您可以按年份分组,如下所示:
const entriesByYearMonth = entries.reduce((accumulator, item) => {
accumulator[item.year] = accumulator[item.year] || {};
accumulator[item.year][item.month] = accumulator[item.year][item.month] || [];
accumulator[item.year][item.month].push(item);
return accumulator;
},{});
按减速机,您可以按年份分组,如下所示:
const entriesByYearMonth = entries.reduce((accumulator, item) => {
accumulator[item.year] = accumulator[item.year] || {};
accumulator[item.year][item.month] = accumulator[item.year][item.month] || [];
accumulator[item.year][item.month].push(item);
return accumulator;
},{});
我将在一些通用助手函数的基础上构建它
常量映射对象=(fn)=>(obj)=>
Object.fromEntries(Object.entries(obj.map)([k,v])=>[k,fn(v)])
常量组=(prop)=>(xs)=>
reduce((a,{[prop]:p,…rest})=>({
A.
[p] :[…(a[p]| |[]),其余]
}), {})
const groupByYearAndMonth=(输入)=>
mapObject(组(“月”)(组(“年”)(输入))
常量输入=[
{foo:333,年份:2019,月份:'11',日期:29},
{foo:334,年份:2019,月份:'11',日期:30},
{foo:335,年份:2019,月份:'12',日期:1},
{foo:336,年份:2019,月份:'12',日期:2},
// ...
{foo:362,年份:2019,月份:'12',日期:28},
{foo:363,年份:2019,月份:'12',日期:29},
// ...
{foo:368,年份:2020,月份:“一月”,日期:3},
{foo:369,年份:2020,月份:“一月”,日期:4},
// ...
{foo:396,年份:2020,月份:“二月”,日期:1},
{foo:397,年份:2020,月份:“二月”,日期:2},
{foo:398,年份:2020,月份:“二月”,日期:3},
// ...
{foo:425,年份:2020,月份:“三月”,日期:30},
{foo:426,年份:2020,月份:“三月”,日期:31},
// ...
]
console.log(groupbyyear和month(输入))
。作为控制台包装{max height:100%!important;top:0}
我将在一些通用助手函数上构建它
常量映射对象=(fn)=>(obj)=>
Object.fromEntries(Object.entries(obj.map)([k,v])=>[k,fn(v)])
常量组=(prop)=>(xs)=>
reduce((a,{[prop]:p,…rest})=>({
A.
[p] :[…(a[p]| |[]),其余]
}), {})
const groupByYearAndMonth=(输入)=>
mapObject(组(“月”)(组(“年”)(输入))
常量输入=[
{foo:333,年份:2019,月份:'11',日期:29},
{foo:334,年份:2019,月份:'11',日期:30},
{foo:335,年份:2019,月份:'12',日期:1},
{foo:336,年份:2019,月份:'12',日期:2},
// ...
{foo:362,年份:2019,月份:'12',日期:28},
{foo:363,年份:2019,月份:'12',日期:29},
// ...
{foo:368,年份:2020,月份:“一月”,日期:3},
{foo:369,年份:2020,月份:“一月”,日期:4},
// ...
{foo:396,年份:2020,月份:“二月”,日期:1},
{foo:397,年份:2020,月份:“二月”,日期:2},
{foo:398,年份:2020,月份:“二月”,日期:3},
// ...
{foo:425,年份:2020,月份:“三月”,日期:30},
{foo:426,年份:2020,月份:“三月”,日期:31},
// ...
]
console.log(groupbyyear和month(输入))
.as console wrapper{max height:100%!important;top:0}
你能发布条目结构吗?我编辑了问题你能发布条目结构吗?我编辑了问题这给出了{item:..}
,并以item
为键。我希望钥匙是今年的。此外,它不会对同一年的项目进行分组。键项
始终只有一个对象@BlackMath查看我的编辑。这将提供{item:..}
,其中项
作为键。我希望钥匙是今年的。此外,它不会对同一年的项目进行分组。键项
始终只有一个对象@BlackMath看看我的编辑。