- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了这个 if/else ,它工作正常,但它很长。我真的很想知道其他开发人员会使用哪些方法来缩短它。
目前我认为它看起来非常像初学者写的(这是正确的)。我很想看看其他人会如何处理它。
我应该提到我在 React Native 工作。
getBatteryIcon() {
if (this.props.batteryLevel >= 81 && this.props.batteryLevel <= 100) {
return (
<Image
source={require('./../../../android/app/src/main/res/drawable/batterylevel_four.png')}
/>
)
} else if (this.props.batteryLevel >= 51 && this.props.batteryLevel <= 80) {
return (
<Image
source={require('./../../../android/app/src/main/res/drawable/batterylevel_three.png')}
/>
)
} else if (this.props.batteryLevel >= 25 && this.props.batteryLevel <= 50) {
return (
<Image
source={require('./../../../android/app/src/main/res/drawable/batterylevel_two.png')}
/>
)
} else {
return (
<Image
source={require('./../../../android/app/src/main/res/drawable/batterylevel_one.png')}
/>
)
}
}
最佳答案
因为您正在使用 if
/else if
(好吧,还因为您在每个 if
的 block ),你可以省略一半的条件,因为你知道它们不会为真:
if (this.props.batteryLevel >= 81) { // I assume it can't go past 100
return (
<Image
source={require('./../../../android/app/src/main/res/drawable/batterylevel_four.png')}
/>
)
} else if (this.props.batteryLevel >= 51) { // Thanks to the `else`, you know it's not 81 or higher
return (
<Image
source={require('./../../../android/app/src/main/res/drawable/batterylevel_three.png')}
/>
)
} else if (this.props.batteryLevel >= 25) { // You know it's not 51 or higher
return (
<Image
source={require('./../../../android/app/src/main/res/drawable/batterylevel_two.png')}
/>
)
} else {
return (
<Image
source={require('./../../../android/app/src/main/res/drawable/batterylevel_one.png')}
/>
)
}
另一种选择是拥有一个您循环遍历的阈值列表。显然,React Native 不允许您在 require
中使用变量(谢谢 Matt Aft 和 OsDev ),因此我们无法尽可能多地删除重复项,但是:
const batteryLevels = [
{level: 81, source: require("./../../../android/app/src/main/res/drawable/batterylevel_four")},
{level: 51, source: require("./../../../android/app/src/main/res/drawable/batterylevel_three")},
{level: 25, source: require("./../../../android/app/src/main/res/drawable/batterylevel_two")},
{level: 0, source: require("./../../../android/app/src/main/res/drawable/batterylevel_one")}
// ^---- or possibly `-Infinity`, see note below
];
然后是
let {source} = batteryLevels.find(({level}) => this.props.batteryLevel >= level);
return (
<Image
source={source}
/>
);
请注意,假设 this.props.batteryLevel
将始终为 >= 0
。您可以将最后一个设置为 level: -Infinity
而不是 level: 0
,really 确定。 :-)
对于一般情况,但由于 require
限制,这不适用于 React Native,我们可以分解出路径和大部分文件名:
// NOT ON REACT NATIVE
let level;
if (this.props.batteryLevel >= 81) { // I assume it can't go past 100
level = "four";
} else if (this.props.batteryLevel >= 51) { // You know it's not 81 or higher
level = "three";
} else if (this.props.batteryLevel >= 25) { // You know it's not 51 or higher
level = "two";
} else {
level = "one";
}
return (
<Image
source={require(`./../../../android/app/src/main/res/drawable/batterylevel_${level}.png`)}
/>
);
关于javascript - 如何重构这个冗长的 if/else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58379932/
我有一些记录到标准输出的测试,我想根据 nose 运行的冗长程度更改我的测试脚本中的日志级别。 如何从正在运行的测试之一中访问 running nose 实例的详细信息? 最佳答案 这有点 hack,
我们正在尝试序列化一个对象树。虽然我们已经成功了。我希望找到一种方法来简化生成的 xml。 对象看起来像下面这样: public class RuleSet { public IEnumera
查看 git-config 变量和 git-pull 文档,我没有看到默认情况下使 git-pull pull 冗长的方法。有人知道方法吗? 最佳答案 并不是所有的配置参数都适用!但是您可以使用别名自
我有一个小型或中等规模的 F# 项目,15 个 *.fs 文件,大约 2000 行代码。编译突然有点慢,大约5秒。我想找出导致编译速度变慢的原因,但找不到像“详细”这样的 fsc 开关,导致它显示进度
许多 scikit-learn 函数都有一个 verbose 参数,根据他们的文档,“[c]控制详细程度:越高,消息越多”(例如,GridSearchCV)。 很遗憾,没有提供关于允许使用哪些整数(例
我正在尝试以旧方式运行 Rails 测试,即以点作为输出,但我认为我遗漏了一些东西。我找不到在哪里关闭冗长模式,每次我运行 rake 任务时,我都会得到一个测试描述列表,这些描述起初看起来不错,但最终
我是一名优秀的程序员,十分优秀!