我正在尝试找出一种将对象数组转换为对象的简单方法
我有一个看起来像这样的对象数组:
[
{
"id": "-LP9_kAbqnsQwXq0oGDT",
"value": Object {
"date": 1541482236000,
"title": "First",
},
},
.... more objects here
]
id希望将其转换为以时间戳为键的对象,并转换为对应于该日期的对象数组。如果该键已经存在,则将该对象添加到与该键关联的对应数组中
{
1541482236000:
[{
"id": "-LP9_kAbqnsQwXq0oGDT",
"value": Object {
"date": 1541482236000,
"title": "First",
},
},
{
"id": "-LP9_kAbqnsQwXqZZZZ",
"value": Object {
"date": 1541482236000,
"title": "Some other title",
},
},
.... more objects here
],
1541482236001:
[{
"id": "-LP9_kAbqnsQ1234",
"value": Object {
"date": 1541482236001,
"title": "Another title",
},
},
.... more objects here
]
}
使用reduce可以达到类似的目的。但是,当它们的键已经存在时,它不处理将对象添加到数组的操作。
calendarReminders = action.value.reduce((obj, reminder) => {
dateKey = moment(reminder.value.date).format('YYYY-MM-DD')
obj[dateKey] = [reminder]
return obj;
}, {});
我该怎么做?
答案 0 :(得分:0)
请测试以下代码!
首先,您要遍历数据数组, 如果您的结果对象/词典已经有了该键,则只需添加当前项
否则,您将生成密钥并设置值
const data = [];
let result = {};
for (const item of data) {
const key = item.value.date;
if (result.hasOwnProperty(key)) {
const prevData = result[key];
result[key] = [...prevData, item];
} else {
result[key] = [item];
}
}
答案 1 :(得分:0)
您只需要检查对象是否已经是键,如果没有,则将其与数组的值相加。然后,您可以push()
放入其中:
let arr = [{"id": "-LP9_kAbqnsQwXq0oGDT","value": {"date": 1541482236000,"title": "First",},},{"id": "SomID","value": {"date": 1541482236000,"title": "Some other title",},},{"id": "A different ID","value": {"date": 1541482236001,"title": "A third title",},}]
let calendarReminders = arr.reduce((obj, reminder) => {
(obj[reminder.value.date] || (obj[reminder.value.date] = [])).push(reminder)
return obj;
}, {});
console.log(calendarReminders)
如果您想随时间将键设置为其他格式,则应该能够做到这一点而无需更改基本概念。