Сгладить тип объекта со свойством массива в typescript реагировать для вывода в react-data-grid

#reactjs #typescript #react-data-grid

#reactjs #typescript #react-data-grid

Вопрос:

Заранее извиняюсь, если на этот вопрос уже был дан ответ, но я изо всех сил пытаюсь найти ответ на него… У меня есть массив, который содержит свойство 2-d массива.

Я хочу вернуть тип, который содержит внутренний массив в виде плоского объекта.

Так, например, мой массив может быть

 {
  name: "Widget",
  event: "Xmas",
  pilot: "Dave",
  session: "drinking",
  frameType: "flight",
  stint: 2016,
 plane: "737",
 **data: {
   "114": "137.623",
   "115": "51.090",
}**
  

}

Я бы хотел, чтобы мой вывод был

 {      
name: "Widget",
      event: "Xmas",
      pilot: "Dave",
      session: "drinking",
      frameType: "flight",
      stint: 2016,
     plane: "737",    
     "114": "137.623",
     "115": "51.090",    
,
}
  

Теперь вот мой код для генерации массива.

Тип:

 type TableItem =
    {
        name: string,
        event: string,
        session: string,
        frameType: string,
        stint: number,
        chassis: string,
        driver: string,
        data: (string | number)[][]
    };



const getTableItem = (index: number) =>
    {
        const d = data[index];
        //Transformentry just makes the id 3 digits
        const dataItems = Object.assign({}, ...Object.entries(d.data).map(transformEntry));        
        


        const tableItem: TableItem = {
            name: d.name,
            event: d.event,
            piolt: d.pilot,
            session: d.session,
            frameType: d.frameType,
            stint: d.stint,
            plane: d.plane,
            data: dataItems
        };      
        return tableItem;  
    };   

 const rows = (data.map((d, index) => { return getTableItem(index); }));
  

Теперь я хочу, чтобы переменная rows(const) содержала сглаженный массив. Я пробовал flat / flatmap и reduce, но не могу заставить их работать.

Если кто-нибудь может указать мне правильное направление, это было бы очень оценено. В основном строки const затем будут переданы компоненту react-data-grid.

Заранее спасибо

Стив

Ответ №1:

data Свойство не является массивом, это другой объект, который может быть причиной того, что такие вещи, как flatMap не сработали для вас.

Если вы хотите сохранить data свойство, но также сгладить его свойства в объекте верхнего уровня, вы можете просто сгладить его с помощью оператора spread ... :

 const input = {
  name: "Widget",
  event: "Xmas",
  pilot: "Dave",
  session: "drinking",
  frameType: "flight",
  stint: 2016,
  plane: "737",
  data: {
   "114": "137.623",
   "115": "51.090",
  }
};

const result = {...input,...input.data};
console.log(result);  

Если вам нужно избавиться от data свойства, которое вы могли бы просто добавить delete result.data; к приведенному выше.

Комментарии:

1. Большое спасибо за это. Разброс потрясающий!!! Пример очень ценится!!