ReactJS:使用JSX进行数据转换

时间:2018-07-09 18:09:05

标签: javascript reactjs jsx

我正在尝试在React应用程序中使用JSX转换数据,但仍在努力弄清楚这样做的步骤。

输入:

active

所需的输出:

const csvData =[
  ['title', 'A', 'B'] ,
  ['E01', 1 , 0] ,
  ['E02', 5 , 0] ,
  ['E03', 10, 2]
];

我这样做的糟糕尝试...

  1. 遍历嵌套数组中的每个数组(第一个数组除外) 包含标题的数组)

  2. 创建嵌套循环以遍历数组中的每个项目。

  3. 在此嵌套循环中,创建一个字典以存储标题(每个数组中的第一项)。利用页眉的索引提取数组中后续项的值。

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

};

3 个答案:

答案 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