【发布时间】:2020-01-12 20:23:38
【问题描述】:
我正在导入包含这样的客户订单的 excel 文件
onFileChange(event: any) {
const inputFile: DataTransfer = <DataTransfer>(event.target);
const fileReader: FileReader = new FileReader();
fileReader.onload = (event: any) => {
const binaryString: string = event.target.result;
const workBook: XLSX.WorkBook = XLSX.read(binaryString, { type: 'binary', sheetStubs: true});
/* sheetstubs true supposedly shows empty cells but isn't */
console.log(typeof binaryString)
const workSheetName: string = workBook.SheetNames[0];
console.log(workSheetName)
const workSheet: XLSX.WorkSheet = workBook.Sheets[workSheetName];
this.data = <Array>(XLSX.utils.sheet_to_json(workSheet, { header: 1, blankrows: true }));
};
fileReader.readAsBinaryString(inputFile.files[0]);
console.log(this.data)
}
excel文件导入数组对象的方式,其中每个数组是excel表的一行。
在下面的代码 sn-p 中,我正在搜索列中的项目以识别 Excel 表中包含客户在代码中请求的鞋品牌的列
for (var i=0; i<this.data.length; i++){
if (this.data[i].indexOf('Adidas') != -1) {
var manIndex = this.data[i].indexOf('Adidas')
for( var j = 0; j<this.data.length; j++){
this.manufactArray.push(this.data[j][manIndex])
}
}
else if (this.data[i].indexOf('Puma') != -1) {
var manIndex = this.data[i].indexOf('Puma')
for (var j=0; j<this.data.length; j++) {
this.manufactArray.push(this.data[j][manIndex])
}
}
else if (this.data[i].indexOf('Nike') != -1) {
var manIndex = this.data[i].indexOf('Nike')
for(var j = 0; j<this.data.length; j++){
this.manufactArray.push(this.data[j][manIndex])
}
}
}
}
它的工作原理是将相关列中的所有项目推送到数组中,但每次满足条件时都会这样做,因此同一列会被推送到数组中很多次,而不是仅推送列项目一次。有没有办法使用% 或其他函数,以便该列只被推入数组一次?因此,如果我有这样的客户表进来:
我希望数组有[Nike, Adidas, Puma, Puma, Asics, Nike]
【问题讨论】:
标签: javascript arrays typescript algorithm