#javascript #arrays
#javascript #массивы
Вопрос:
0: {todo: "go for a walk", todoData: "Thu Jan 14 2021", todoId: "kjr4ianh"}
1: {todo: "asdqwe", todoData: "Sun Jan 10 2021", todoId: "kjrg2wwv"}
2: {todo: "asdqwe", todoData: "Sun Jan 10 2021", todoId: "kjrg2xxb"}
Я хотел бы преобразовать этот массив в объект на основе todoData
. Я хочу, чтобы это было что-то вроде этого:
{
Sun-Jan-10-2021: {
todo: {todo: "asdqwe", todoId: "kjrg2wwv"}
todo: {todo: "asdqwe", todoId: "kjrg2xxb"}
}
Thu-Jan-14-2021: {
todo: {todo: "go for a walk", todoId: "kjr4ianh"}
}
}
Какие-либо предложения?
Комментарии:
1. пожалуйста, примите ответ в качестве решения, если он решает проблему, чтобы закрыть вопрос
Ответ №1:
Ваш ожидаемый результат недействителен json
, вы можете группировать элементы с одинаковой датой в массиве следующим образом:
const data = [
{todo: "go for a walk", todoData: "Thu Jan 14 2021", todoId: "kjr4ianh"},
{todo: "asdqwe", todoData: "Sun Jan 10 2021", todoId: "kjrg2wwv"},
{todo: "asdqwe", todoData: "Sun Jan 10 2021", todoId: "kjrg2xxb"}
];
const res = data.reduce((acc,item) => {
const { todoData, ...itemData } = item;
const prev = acc[todoData];
acc[todoData] = prev
? [...prev, itemData]
: [itemData];
return acc;
}, {});
console.log(res);
Ответ №2:
Мы не можем иметь одинаковые значения нескольких ключей в объекте, таким образом группируя по дате.
const data = [
{todo: "go for a walk", todoData: "Thu Jan 14 2021", todoId: "kjr4ianh"},
{todo: "asdqwe", todoData: "Sun Jan 10 2021", todoId: "kjrg2wwv"},
{todo: "asdqwe", todoData: "Sun Jan 10 2021", todoId: "kjrg2xxb"}
];
const transformed = {};
data.forEach(elem => {
if(!transformed[elem.todoData]) {
transformed[elem.todoData] = []
}
transformed[elem.todoData].push({
todoId: elem.todoId,
todo: elem.todo
})
});