我有一个dates
数组,我正在尝试使用键/值对创建一个对象。月份名称将是键,日期将是值。
在下面的代码中,它打印一个空对象。知道缺少什么来实现:
{
'may': ['2018/05/24', '2018/05/30']
}
main.ts
const arr = ["2018/05/24","2018/05/30"]
private buildObject(obj) {
const _obj = obj;
let dateObject = {};
_obj.forEach((element) => {
const d = new Date(element);
const m = monthNames[d.getMonth()];
for (const key in dateObject){
if (_obj) {
dateObject[key] = Object.assign({}, {[m]: element});
}
}
})
console.log("____DATES", dateObject);
return dateObject;
}
console.log(this.buildObject(arr));
答案 0 :(得分:2)
这段代码有各种各样的错误。
if
语句是不必要的,因为_obj
始终是一个数组。Object.assign({}, {[m]: element});
不必要地将新对象合并到空对象中。它与编写{[m]: element}
。由于您无法解释输出应该是什么,我只能假设您要将月份名称映射到日期的列表。以下代码执行此操作:
const monthNames = {4: "May"};
const arr = ["2018/05/24","2018/05/30"];
const dateObject = {};
for (const dateString of arr) {
const date = new Date(dateString);
const month = monthNames[date.getMonth()];
if (dateObject[month]) {
dateObject[month].push(dateString);
} else {
dateObject[month] = [dateString];
}
}
console.log(dateObject);

广义"分组"功能:
function groupBy(arr, keyFunc) {
const result = {};
for (const value of arr) {
const key = keyFunc(value);
if (result[key]) {
result[key].push(value);
} else {
result[key] = [value];
}
}
return result;
}
用作
const dateObject = groupBy(
arr,
dateString => monthNames[new Date(dateString).getMonth()],
);
答案 1 :(得分:0)
您只需要遍历传入的数组。
const arr = ["2018/05/24","2018/05/30"]
function buildObject(obj) {
let dateObject = {};
obj.forEach(function(element) {
let d = new Date(element);
let mounth = d.toLocaleString("en-us", { month: "long" });
dateObject[mounth] ? dateObject[mounth].push(element) :dateObject[mounth]= [element];
})
return dateObject;
}
console.log(buildObject(arr));