我有一个表,其中包含一些数据,我想将其放入一个数组中。该表的布局可以随时更改,由用户决定每列的列标题(列标题成为数组中的关键字。在该表中,可以有多列具有相同的标题,但在这种情况下,数据位于一列或其他列中:
- 全部唯一**
| 日期|说明|金额|
| - ------|- ------|- ------|
| 第一次|行|一百|
| 第二次|行|-50|
- 标题重复**
| 日期|说明|金额|金额|
| - ------|- ------|- ------|- ------|
| 第一次|行|一百||
| 第二次|行||-50|
请注意,列的顺序由用户根据表的源进行定义(他上传到我的应用程序的csv)。到目前为止,我所拥有的代码可以很好地处理唯一的头文件,并且能够发现重复项的索引。对于重复项的情况,问题是在第一行,它将返回Amount:''
,因为它将用后者覆盖前者。在第二行,它将返回预期的Amount: '-50'
。我需要帮助来改进我的代码,使第一行在重复的情况下返回Amount: '100'
。
我的代码:
$('.importer').click(function(e){
e.preventDefault();
//quante colonne sono rimaste
var cols= $(".tbi").find("tr:first th").length-1;
//mappatura di ogni colonna
var intestColonne = [];
$('.tbi').find('tr:first th > select').each(function(){
intestColonne.push($(this).val());
});
const importi=intestColonne.map((x, i) => x === 'importo' ? i : null).filter(x => x != null);
//il pezzo commentato fa la stessa cosa della riga sopra
/*intestColonne.reduce((acc, curr, i) => {
if (curr === 'importo') acc.push(i);
console.log(acc);
return acc;
}, []);*/
//leggo ogni colonna
var movimenti=[];
$('.tbi > tbody > tr').each(function(index, tr) {
var movimento = [];
$(this).find('td').each(function(index,td){
if(index<cols){
movimento[intestColonne[index]] = $(this).text();
//here I have to add something to manage the duplicate indexes that are stored in the importi const
}else{
movimento['causale']= $(this).children('select').val();
movimento['segno']= $(this).children('select').find(':selected').data('segno');
}
});
movimenti.push(movimento);
});
console.log(movimenti);
});
第二行的结果如下所示
Array []
causale: "3"
data_cont: "19/01/2021"
data_val: "19/01/2021"
descr: "PRELIEVO BANCOMAT"
importo: "-50"
length: 0
segno: "-"
而实际上对于第一行来说
0: Array []
causale: "3"
data_cont: "19/01/2021"
data_val: "19/01/2021"
descr: "PRELIEVO BANCOMAT"
importo: ""
length: 0
segno: "-"
我想输入"100"
一个三个三个一个
如果运行上面的代码段,结果将是只有最后一行有"Importo"的值,其他所有行都没有值。第一行中的250.0将被第二个空的"Importo"列覆盖
3条答案
按热度按时间smdnsysy1#
根据我的理解,当你移动到下一个单元格时,你想要获取单元格的文本值,除非它是空的,并且已经有一个非空的值用于这个标题。
应该成为
0yg35tkg2#
我自己找到了解决办法:
如果我在标记为“Importo”
if(importi.includes(index)){
的列上,并且单元格if($(this).text()!=''){
不为空,那么我将压入值。否则我将跳过单元格。我已经想到了这一点,但之前无法将其写在代码中。cig3rfwq3#
别误会我的意思,但我还是不明白你的解释。
不过我还是写了这段代码,我希望它能帮助你(?)