比较一个表中数组不同行的两个值Angular
Posted
技术标签:
【中文标题】比较一个表中数组不同行的两个值Angular【英文标题】:Compare two values of different rows of an array in one table Angular 【发布时间】:2022-01-09 15:04:21 【问题描述】:我想比较不同行中的 2 个值。思路是,当用mat-checkbox选中每一行时,我得到我需要的数据并且满足以下条件:如果“tipo de gasto”列中的数据不同,“insumo”列中的数据必须相同,否则,如果“tipo de gasto”不同但“insumo”不一样,则按下按钮执行该功能时必须产生错误。
我正在使用“for”来遍历整个数组,问题是它直接通过并且没有考虑条件。
HTML:
在至少选择了 1 个 mat-checkbox 之前,该按钮处于禁用状态。当我单击时,我希望执行条件。如果可能,请取消选择已选择的 mat-checkbox
。
<button
mat-raised-button
class="solicitarCdp"
[disabled]="comprobarFilas()"
(click)="procesarClic()"
>
Solicitar CDP
</button>
TS
Request 包含我正在分析的整个数组。
procesarClic()
const request = this.selection.selected;
for (let i = 0; i < request.length; i++)
let insumoFila = request[i].insumo;
let tipoGastoFila = request[i].tipoGasto;
if(insumoFila[i] !== insumoFila[i++] && tipoGastoFila[i] !== tipoGastoFila[i++])
window.alert("Los insumos no coinciden");
return request
const newTable = this.dialog.open(SolicitudCdpDialog,
width: '400px',
disableClose: true,
data: datosItem:request
);
非常感谢您的帮助!
【问题讨论】:
用户一次只能选择两行而不能再选择吗?你只是检查两个adjustand行 此条件仅适用于仅选择 2 行。如果选择的行超过 2 行,则不应生成错误消息。 【参考方案1】:使用Set
查看是否全部相同或全部不同。
procesarClic()
const request = this.selection.selected;
// assuming that these two columns has either number or string in them.(not reference type)
// Set will only have unique values
let tipoGastoSet = new Set(request.map(c => c.tipoGastoFila));
let insumo = new Set(request.map(c => c.insumo));
// check if all tipoGastoSet are same, size 1 , and insumo should be size of request if all are different
if (request.length === 2 && tipoGastoSet.size === 2 && insumo.size !== 1)
window.alert("Los insumos is not different");
【讨论】:
感谢您的回答 Vaira,但“请求”不是数字。 “Tipo de Gasto”只能有 2 个值:Funcionamiento 或 Inversión。如果选择了 2 行并且“Tipo de Gasto”不同,则必须比较“Insumo”列并且这些值必须相同。如果“Insumo”不一样,它应该会生成一条错误消息。仅适用于仅选择 2 行的情况。如果选择的行超过 2 行,则不应生成错误消息。 我将请求作为一个数组并更新了代码。【参考方案2】:感谢您的帮助 Vaira。我正在做一些调整,我找到了答案:因为我必须比较 2 行之间的 2 列,所以我创建了一些常量并创建了 3 个条件:如果 2 行和“insumo”之间的“tipo de gasto”不同2 行之间是不同的,并且请求的长度小于 3(我设置此条件是因为我可以选择多于 2 行)我必须 PUT 错误消息。
TS
procesarClic()
const request = this.selection.selected;
for (let i = 0; i < request.length; i++)
const insumoFila = request[i].insumo;
const tipoGastoFila = request[i++].tipoGasto;
const insumoFila2 = request[i].insumo;
const tipoGastoFila2 = request[i++].tipoGasto;
if (tipoGastoFila !== tipoGastoFila2 &&
insumoFila !== insumoFila2 &&
request.length < 3)
window.alert("Los insumos no coinciden");
return request
else
const newTable = this.dialog.open(SolicitudCdpDialog,
width: '400px',
disableClose: true,
data: datosItem:request
);
return newTable
【讨论】:
以上是关于比较一个表中数组不同行的两个值Angular的主要内容,如果未能解决你的问题,请参考以下文章