En mi código JS tengo dos booleanos, flag1 y flag2 . Quiero crear una matriz ['a', 'b', 'c'] donde a se incluye solo si flag1 es verdadero, y donde b se incluye solo si flag2 es verdadero. Lo que tengo ahora es [flag1 ? 'a' : null, 'b', flag2 ? 'c' : null] , pero si flag1 y flag2 son falsos, esto me da [null, 'b', null] en lugar de ['b'] .
SOLUCIÓN:
Esta es la forma más limpia que encontré para hacerlo: [...(flag1 ? ['a'] : []),'b',...(flag2 ? ['c'] : [])]
Puede tomar una función que devuelva el valor dentro de una matriz o una matriz vacía para distribuirla en una matriz.
const either = (condition, value) => condition ? [value] : [], getArray = (flag1, flag2) => [ ...either(flag1, 'a'), ...either(flag2, 'b'), 'c' ]; console.log(...getArray(true, true)); console.log(...getArray(false, true)); console.log(...getArray(true, false)); console.log(...getArray(false, false));Otra implementación:
const flag1 = true; const flag2 = false; const data = [[flag1, 'a'], [flag2, 'b'], [true, 'c']]; const result = data.flatMap(([flag, letter]) => flag ? letter : []); console.log(result);