我正在尝试在React应用程序中使用JSX转换数据,但仍在努力弄清楚这样做的步骤。
输入:
active
所需的输出:
const csvData =[
['title', 'A', 'B'] ,
['E01', 1 , 0] ,
['E02', 5 , 0] ,
['E03', 10, 2]
];
我这样做的糟糕尝试...
遍历嵌套数组中的每个数组(第一个数组除外) 包含标题的数组)
创建嵌套循环以遍历数组中的每个项目。
在此嵌套循环中,创建一个字典以存储标题(每个数组中的第一项)。利用页眉的索引提取数组中后续项的值。
const jsonData =
{
"A":
{
"E01": 1,
"E02": 5,
"E03": 10
},
"B":
{
"E01": 0,
"E02": 0,
"E03": 2
}
}
由控制台打印的结果:
export function transformData(data) {
let dict = [];
// array of header labels
const arr = data[0];
// Looping through each row
for (var i=1; i<data.length; i++) {
// Create a dictionary by iterating through each header label, then extracting title and its value
arr.map((f) => dict.push(
{key: f,
value: {key: data[i][0], value: data[i][f]}
}))
}
console.log(dict);
};
答案 0 :(得分:1)
您可以使用reduce
并在forEach
方法内部执行此操作并返回对象。
const csv = [
['title', 'A', 'B'],
['E01', 1, 0],
['E02', 5, 0],
['E03', 10, 2]
];
const result = csv.reduce((r, a, i) => {
if (i) {
a.forEach((e, j) => {
if (j) {
let key = csv[0][j]
if (!r[key]) r[key] = {}
r[key][a[0]] = e;
}
})
}
return r;
}, {})
console.log(result)
您还可以先使用slice
从第一个数组中获取列,然后使用reduce来构建对象。
const csv = [
['title', 'A', 'B'],
['E01', 1, 0],
['E02', 5, 0],
['E03', 10, 2]
];
const keys = csv[0].slice(1)
const result = csv.slice(1).reduce((r, a) => {
a.slice(1).forEach((e, i) => {
let key = keys[i]
if (!r[key]) r[key] = {}
r[key][a[0]] = e
});
return r;
}, {})
console.log(result)
答案 1 :(得分:1)
您可以使用嵌套的for循环来获得结果:
HttpLoadBalancing
答案 2 :(得分:0)
我认为这可能对您有用。我已添加评论。希望它对您有用!
const csvData =[
['title', 'A', 'B'] ,
['E01', 1 , 0] ,
['E02', 5 , 0] ,
['E03', 10, 2]
];
// Separates the header from the data
const header = csvData.shift();
// Takes out the first row as we are not going to use it.
header.shift();
// Create the output data
const output = {};
// Iterate each header value to create the keys. Ex { A: {}, B: {}}
for(let i=0; i<header.length; i++) {
const key = header[i];
// Creates the Key Property
output[key] = {};
// Assign the Values on the Key based on the rows with data
for (let j=0; j< csvData.length; j++) {
const row = [ ...csvData[j] ];
// As the first column is always the key property, we take it
const prop = row.shift();
// Then we take the value according the header index (i)
const value = row[i];
output[key][prop] = value;
}
}
console.log(output);
我还创建了一个fiddle。