【发布时间】:2019-06-10 15:26:10
【问题描述】:
我正在尝试加载两个 CSV 文件。一个是系统的标准,另一个是我们要导入的。我正在尝试创建一个表格,其中一侧显示标准,另一侧显示正在导入的 CSV 的下拉列表。显示标准并不太难,但在加载新的 CSV 文件时需要一些帮助,并且需要将新的 CSV 映射到标准,然后在正确的字段中创建一个包含信息的新文件。
这适用于 Javascript 和 ReactJS。我还没有找到一种方法来做到这一点,并希望得到一些帮助来解决这个问题。
import React, { Component } from 'react';
import Table from 'react-bootstrap/Table';
import ReactFileReader from 'react-file-reader';
export default class TableMap extends Component {
state = {
iGorMap: [
{
"FiduciaryOutsourcingField": "ID",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "CreateDate",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "UpdateDate",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "RecordStatus",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "Source",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "SourceId",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "BatchNumber",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "CompletedStages",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "EIN",
"YourField": ""
},
{
"FiduciaryOutsourcingField": "Location",
"YourField": ""
},
]
}
// renderSelectedDropdown() {
// return this.state.
// }
renderDropdownValues() {
handleFiles = files => {
var reader = new FileReader();
reader.onload = e => {
// Use reader.result
this.setState({
csvData: reader.result
});
};
reader.readAsText(files[0]);
console.log(reader);
};
function convertJson(csvData) {
var temp = csvData.split("\n");
var temp2 = temp[0].split(",");
return temp2;
}
var mappedFromCsv = convertJson(csvData);
// var mappedFromCsv = Object.keys(this.state.temp2)
//console.log(header)
return mappedFromCsv.map((key, index) => {
return <option value={index}>{key}</option>
// return <th className="tableHeader" key={index}>{key}</th>
})
}
renderTableData() {
return this.state.iGorMap.map((iGorMap, index) => {
const { FiduciaryOutsourcingField, YourField } = iGorMap
return (
<tr key={FiduciaryOutsourcingField}>
<td>{FiduciaryOutsourcingField}</td>
<td>
<div className="dropdown" role="combobox" >
<select class="browser-default custom-select">
<option selected>Open this select menu</option>
{this.renderDropdownValues()}
</select>
</div>
</td>
</tr >
)
})
}
renderTableHeader() {
let header = Object.keys(this.state.iGorMap[0])
return header.map((key, index) => {
return <th className="tableHeader" key={index}>{key}</th>
})
}
render() {
return (
<div>
<ReactFileReader
multipleFiles={false}
fileTypes={[".csv"]}
handleFiles={this.handleFiles}
>
<button type='button' className="btn btn-success">Upload</button>
</ReactFileReader>
<Table bordered hover striped>
<thead className="thead-dark" id="top">
{this.renderTableHeader()}
</thead>
<tbody>
{this.renderTableData()}
</tbody>
</Table>
</div>
)
}
};
【问题讨论】:
-
抱歉,代码格式问题已尝试修复,但无法找到将其全部显示在代码屏幕中的方法。
-
感谢@derpirscher 修复了我的代码示例。
标签: javascript arrays json reactjs csv