在执行类似任务的 if/else 语句中使用 for 循环的最佳方法是什么?
What's the best way to use a for-loop in an if/else statement that performs a similar task?
在下面的代码中,即使 if/else 语句的计算结果为真或假,也会调用 doSomething()
函数。我想知道是否有一种方法可以重构此代码以使其“更干燥”。在我的实际代码中,循环体比调用单个函数要长,所以我认为它值得重构。
if (somethingIsTrue) {
array1.forEach(val => {
doSomething(val);
});
} else {
array2.forEach(val => {
doSomething(val);
});
}
这里可以使用条件运算符。可能也不需要匿名函数包装器。
(somethingIsTrue ? array1 : array2).forEach(doSomething);
我会将逻辑隔离到一个通用函数中并将数组传递给它。该函数不需要知道它迭代了哪个数组以及决定哪个数组可以在函数外部处理的逻辑。
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));
}
在下面的代码中,即使 if/else 语句的计算结果为真或假,也会调用 doSomething()
函数。我想知道是否有一种方法可以重构此代码以使其“更干燥”。在我的实际代码中,循环体比调用单个函数要长,所以我认为它值得重构。
if (somethingIsTrue) {
array1.forEach(val => {
doSomething(val);
});
} else {
array2.forEach(val => {
doSomething(val);
});
}
这里可以使用条件运算符。可能也不需要匿名函数包装器。
(somethingIsTrue ? array1 : array2).forEach(doSomething);
我会将逻辑隔离到一个通用函数中并将数组传递给它。该函数不需要知道它迭代了哪个数组以及决定哪个数组可以在函数外部处理的逻辑。
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));
}