#reactjs
#reactjs
Вопрос:
Я пытаюсь взять полезную нагрузку json и отобразить ее в react-table
. Требуемый формат для их таблицы (очень специфичный и) следующий: (это целевой формат, который я пытаюсь создать)
const rTableObj = [
{'Col1': row1_col1, 'Col2': row1_col2, 'Col3': row1_col3},
{'Col1': row2_col1, 'Col2': row2_col2, 'Col3': row2_col3},
...
]
Необработанный объект полезной нагрузки после fetch(url)
и response.json
отображается как:
rawPayload:
Names: {0: "Rebecca", 1: "Sally", 2: "Sally", 3: "Charlie", ...}
Nums: {0: 11, 1: 16, 2: 8, 3: 12, ...}
Range: {0: 0, 1: 1, 2: 2, 3: 3, ...}
Я могу извлечь имена столбцов, такие, которые у меня будут (в этом примере) colNames = ['Names', 'Nums', 'Range']
, и я могу извлечь значения для их собственного объекта как
vals: Array(3)
0: {0: "Rebecca", 1: "Sally", 2: "Sally", 3: "Charlie", ...}
1: {0: 11, 1: 16, 2: 8, 3: 12, ...}
2: {0: 0, 1: 1, 2: 2, 3: 3, ...}
Но все, что я пробовал ( .map(...)
, [].concat(_.merge(...)
, и т.д.), Не приводит меня к цели. Я хочу иметь возможность отправлять любую полезную нагрузку в mapper, чтобы возвращался правильно отформатированный объект. В этом примере это будет выглядеть так:
const rTableObj = [
{'Names': "Rebecca", 'Nums': 11, 'Range': 0},
{'Names': "Sally", 'Nums': 16, 'Range': 1},
...
]
Ответ №1:
Попробуйте это: Отредактировано: так что он работает динамически с разными именами столбцов
rawPayload = {
Names: { 0: "Rebecca", 1: "Sally", 2: "Sally", 3: "Charlie" },
Nums: { 0: 11, 1: 16, 2: 8, 3: 12 },
Range: { 0: 0, 1: 1, 2: 2, 3: 3 },
Age: { 0: 20, 1: 21, 2: 22, 3: 23 }
};
const tableMap = (rawPayload) => {
let colNames = Object.keys(rawPayload);
let length = Object.values(rawPayload[colNames[0]]).length
let rTableObj = [];
for (let i = 0; i < length; i ) {
var entry = {};
for (let j = 0; j < colNames.length; j ) {
var name = colNames[j];
entry[name] = rawPayload[name][i];
}
rTableObj.push(entry);
}
return rTableObj;
};
console.log(tableMap(rawPayload));
Комментарии:
1. спасибо за ответ — я пытаюсь не жестко кодировать имена столбцов, а извлекать их, а затем использовать. Есть ли какой-либо способ извлечь их из массива colNames в вашей функции? Нравится
colNames = ['Names', 'Nums', 'Range']
?2. @WaveRider отредактирован для динамической обработки имен столбцов
3. Выглядит хорошо! Требуется одно изменение: остается одна зависимость от имени столбца в вашей строке
let length = Object.values(rawPayload["Names"]).length;
, которую можно / нужно изменить на:const length = Object.values(rawPayload[colNames[0]]).length;
… и тогда вы выиграете приз 😉 … Спасибо!