使用在集合中获得的值,将包含该集合索引的数组中的值推送到单独的数组中



问题

所以我有一个大型数据表,它包含一些我不真正关心的数据,还有一些我不关心的数据,所以我试图将我关心的数据填充到一个更小、更紧凑的表中。通过使用正则表达式,我能够找到包含我关心的信息的索引,并将它们放在一个集合中。下面显示了我如何执行此操作的片段

导入 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 */
const workSheetName: string = workBook.SheetNames[0];
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]);  
}

这样做是读取 excel 工作表并将其转换为数组对象,其中每个数组都是 excel 工作表的一行。所以为了找到我想要的东西,我创建了以下函数">

columnsWithManufacturer()
{
var someManufacturers = [//list of a bunch of regex phrases//];
var manColumnIndexes = new Set();
for (var manufacturer of someManufacturers)
{
for (const row of this.data)
{
for (var cell=0; cell< row.length; cell++)
{
if (manufacturer.test(row[cell]))
{
manColumnIndexes.add(cell)
}
}
}
}
return manColumnIndexes
}

单元格的值实际上是 excel 工作表中数据所在的列值,集合是找到数据的所有唯一列号。我正在尝试做的是基本上将我找到的每个列推送到一个单独的数组中。因此,例如,如果在第 14、16 和 17 列中找到信息,我想使用单独的函数将第 14

列中的所有数据推送到数组中,将第 16 列中的所有数据推送到数组中,将第 17 列中的所有数据推送到数组中。

我尝试过什么

现在创建一个新函数,我已经尝试了以下方法:

pushIntoSeparateArrays()
{
var manufacturersArrays = [this.primaryManufactArray,this.altManufactArr,this.altManufactArr2,this.altManufactArr3]
var manufactIndexes = this.columnsWithManufacturer()
for (var array of manufacturersArrays)
{
for (var row in this.data)
{
manufactIndexes.forEach((value) =>
{
array.push(this.data[row][Number(value)])
})
}
} 
}

但是,正如我现在意识到的那样,这最终的作用是将所有列值中的所有数据推送到所有数组中,我是否缺少一个步骤,以便我可以完成我试图实现的目标将数据分离到不同的数组?

我认为问题是您在没有任何条件的情况下对每个manufacturersArrays执行相同的操作。

一种方法是维护您感兴趣的列及其数组的映射。见下文:

const data = [
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
];
function columnsWithManufacturer() {
return new Set([0, 1, 4]);
}
function pushIntoSeparateArrays() {
const columns = columnsWithManufacturer();
const interestingColumns = new Map();

columns.forEach(column => {
const array = [];
interestingColumns.set(column, array);
data.forEach(row => {
const cellValue = row[column];
array.push(cellValue);
});
});

return interestingColumns;
}
const interestingColumns = pushIntoSeparateArrays();
console.log(Array.from(interestingColumns.get(0)));
console.log(Array.from(interestingColumns.get(1)));
console.log(Array.from(interestingColumns.get(4)));

最新更新