En el siguiente código, incluso si la instrucción if/else se evalúa como verdadera o falsa, se llama a la función doSomething() . Lo que me preguntaba es si hay una manera de refactorizar este código para que sea "DRYer". En mi código real, el cuerpo del bucle es más largo que una sola función que se llama, por lo que creo que vale la pena refactorizarlo.
if (somethingIsTrue) { array1.forEach(val => { doSomething(val); }); } else { array2.forEach(val => { doSomething(val); }); }El operador condicional se puede utilizar aquí. Probablemente tampoco sea necesario el contenedor de funciones anónimas.
(somethingIsTrue ? array1 : array2).forEach(doSomething);Aislaría la lógica en una función común y le pasaría la matriz. La función no necesita saber sobre qué matriz se está iterando y esa lógica de decidir qué matriz se puede manejar fuera de la función.
let somethingIsTrue = true; const mArr1 = [1, 2, 3, 4, 5]; const mArr2 = [6, 7, 8, 9, 10]; businessLogic(somethingIsTrue ? mArr1 : mArr2); somethingIsTrue = !somethingIsTrue; console.log('---------------------------'); businessLogic(somethingIsTrue ? mArr1 : mArr2); function businessLogic(mArr) { mArr.forEach(val => console.log(val)); }