Estoy tratando de entender qué significa este operador ternario anidado usando javascript.
a continuación se muestra el código,
const columns = !isUser1Readable ? allColumns.filter(column => !columnIdsUser1.includes(column.id)) : !isUser2Readable ? allColumns.filter(column => !columnIdsUser2.includes(column.id)) : allColumns;que he entendido?
parece que si isUser1Readable se evalúa como falso, filtra la matriz de todas las columnas de modo que no contenga la columna de columnIdsUser1
si isUser1Readable es verdadero e isUser2Readable es falso, entonces filtra la matriz de todas las columnas de modo que no contenga la columna de columnIdsUser2
Pero, ¿cuándo se asigna allColumns a las columnas?
¿Podría alguien ayudarme a entender qué hace este operador ternario anidado arriba? Gracias.
pero ¿cuándo se asigna allColumns a las columnas?
En el caso restante, es decir, cuando tanto isUser1Readable como isUser2Readable son verdaderos.
La expresión ternaria encadenada se puede interpretar como una secuencia if ... else if ... else :
let columns; if (!isUser1Readable) { columns = allColumns.filter(column => !columnIdsUser1.includes(column.id)); } else if (!isUser2Readable) { columns = allColumns.filter(column => !columnIdsUser2.includes(column.id)); } else { columns = allColumns; }El operador condicional¹ es codicioso . La expresión es más clara con sangría:
const columns = !isUser1Readable ? allColumns.filter(column => !columnIdsUser1.includes(column.id)) : !isUser2Readable ? allColumns.filter(column => !columnIdsUser2.includes(column.id)) : allColumns;!isUser1Readable es true , a las columns se les asigna el resultado de allColumns.filter(column => !columnIdsUser1.includes(column.id)) .!isUser2Readable es true , a las columns se les asigna el resultado de allColumns.filter(column => !columnIdsUser2.includes(column.id))columns se asignan allColumns .pero ¿cuándo se asigna allColumns a las columnas?
Cuando tanto !isUser2Readable como !isUser2Readable son false .
¹ Aunque la gente lo llama con frecuencia "el operador ternario", en realidad es solo un operador ternario (un operador que acepta tres operandos). Actualmente es el único operador ternario de JavaScript, pero eso podría cambiar. Su nombre es "el operador condicional".
Como el operador ternario se define así
condition ? exprIfTrue : exprIfFalseCondition se evalúe como verdaderaCondition se evalúe como falsaEl código que proporciona puede ser refactorizado como este
let allColumns = []; if(!isUser1Readable) { allColumns = allColumns.filter(column => { return !columnIdsUser1.includes(column.id); }); } else if (!isUser2Readable) { allColumns = allColumns.filter(column => { return !columnIdsUser2.includes(column.id); }); }else { columns = allColumns; }Puede obtener más información sobre el operador condicional (ternario)