Javascript — преобразование массива в объект на основе определенных данных из массива

#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
    })
});