Quiero recorrer una serie de proyectos, filtrar elementos con múltiples condiciones y enviarlos a la matriz de destino. El resultado debe tener 4 arreglos que contengan todos los proyectos que cumplieron con la condición de cada arreglo específico. Algo como esto
// 4 cases of the parent array const arrayOverDeadline_overBudget = [] const arrayOverDeadline_withinBudget = [] const arrayOneMonthDeadline_OverBudget = [] const arrayOneMonthDeadline_withinBudget = [] export const filterArray = (array) => { const today = moment(); const oneMonthBefore = moment().add(1, "m"); array.forEach((item) => { switch (item.deadline && item.budget) { // over deadline && over budget // (deadline <= today) && (budget > 100%) case params.deadline <= today && params.budget >= 100: break; // over deadline && within budget // (deadline <= today) && (80% < budget < 100%) case params.deadline < today && params.budget < 100 && params.budget > 80: break; // within deadline && within budget // (today < deadline < oneMonthBefore) && (80% <= budget < 100%) case params.deadline > today && params.deadline < oneMonthBefore && params.budget < 100 && params.budget >= 80: break; // within deadline && over budget // (today < deadline < oneMonthBefore) && (budget >= 100%) case params.deadline > today && params.deadline < oneMonthBefore && params.budget > 100: break; default: break; } }); };Busqué algunas respuestas y encontré Flags and Bitmasks pero no estaba seguro de cómo implementarlo en mis casos. También me preocupa la complejidad temporal de mi método. Cualquier sugerencia o idea será muy bienvenida y apreciada.
Actualizar:
if..elseif...else pero solo quería saber si hay formas "más limpias", y no tiene que usar la declaración de switch .Simplemente puede dividir esto en 2 variables booleanas:
bool1 = is project over the deadlinebool2 = is project over the budget Cree un int a partir de estas variables ( bool1 desplazado a la derecha una vez + bool2 ) para obtener un valor entre [0,3] , y luego puede asignar este valor a la matriz de destino.
Ejemplo:
bool1 = 0, bool2 = 0 . Valor objetivo = 00 (binary) = 0 . El valor objetivo 0 se asigna a por under deadline, under budget .bool1 = 0, bool2 = 1 . Valor objetivo = 01 (binary) = 1 . El valor objetivo 1 se asigna a por under deadline, over budget .bool1 = 1, bool2 = 0 . Valor objetivo = 10 (binary) = 2 . El valor objetivo 2 se asigna a over deadline, under budget .bool1 = 1, bool2 = 1 . Valor objetivo = 11 (binary) = 3 . El valor objetivo 3 se asigna a over deadline, over budget .Puede generar este valor objetivo usando solo una línea de código y luego usar estos casos para decidir la matriz de destino debería eliminar la necesidad de escribir complicados bloques if-else.
Agregar una implementación de muestra:
const budget = 100, deadline = 100 const item_budget = 120, item_deadline = 80 const b1 = Number(item_deadline > deadline) const b2 = Number(item_budget > budget) const target = (b1 << 1) + b2 switch (target) { case 0: console.log("under deadline, under budget") break; case 1: console.log("under deadline, over budget") break; case 2: console.log("over deadline, under budget") break; default: console.log("over deadline, over budget") } // prints "under deadline, over budget"