javascript - 获取正确的数字
问题描述
抱歉标题不好,但我什至无法正确命名问题,因此无法搜索解决方案,我只能描述我想要实现的目标。
我有一份发动机类型及其燃料的清单。
export const engineTypes = {
0: 'HYBRID',
1: 'GASOLINE',
2: 'GAS',
4: 'DIESEL',
8: 'ELECTRIC',
}
export const fuelTypes = {
DIESEL: 'Diesel',
GASOLINE: 'Gasoline',
GAS: 'Gas',
HYBRID: 'Hybrid',
ELECTRIC: 'Electric',
}
export const getFuelTypeByEngineType = (type) => {
const engine = engineTypes[type]
if (engine) {
return fuelTypes[engine]
}
}
这个想法是传递一个值,比如getFuelTypeByEngineType(2)
让 'GAS' 返回,但是,如果我做类似的事情,getFuelTypeByEngineType(9)
我应该得到 ['GASOLINE', 'ELECTRIC'] 回来。
含义 9 是 -> 8(电动)+ 1(汽油)
如何做到这一点?请帮忙!
解决方案
如果您借用链接问题中关于将任意数字分解为位的答案之一,那么您需要做的就是使用Array.prototype.map
返回一个引擎类型数组,其键存在于返回的位数组中。
一些问题:
- 您应该使用 的键
0
,因为在最后的分解步骤中,您总是会得到余数 0。如果您坚持这样做,那么您将需要在您的方法中使用保护子句,["HYBRID"]
如果值为0
- 如果密钥中不存在
engineTypes
,您将获得undefined
. 这可以通过过滤映射数组轻松规避。
请参阅下面的概念验证:
const engineTypes = {
0: 'HYBRID',
1: 'GASOLINE',
2: 'GAS',
4: 'DIESEL',
8: 'ELECTRIC',
}
const fuelTypes = {
DIESEL: 'Diesel',
GASOLINE: 'Gasoline',
GAS: 'Gas',
HYBRID: 'Hybrid',
ELECTRIC: 'Electric',
}
const getFuelTypeByEngineType = (type) => {
if (type === 0) {
return [engineTypes[type]];
}
return getBits(type)
.map(t => {
return engineTypes[t];
})
.filter(v => !!v);
}
const getBits = (value) => {
let b = 1;
const res = [];
while (b <= value){
if (b & value) res.push(b);
b <<= 1;
}
return res;
}
console.log(getFuelTypeByEngineType(0)); // ["HYBRID"]
console.log(getFuelTypeByEngineType(9)); // ["GASOLINE", "ELECTRIC"]
console.log(getFuelTypeByEngineType(64)); // []
推荐阅读
- python - RTSP 流在 python 上不起作用,但在 VLC 上起作用。为什么?
- excel - SeleniumBasic VBA TakeScreenshot 元素在屏幕截图之外的错误
- c# - C# - 系统诊断 - 文件日志从控制台获取所有输出
- python - 如何重新格式化日期
- javascript - 快照视频作为预览
- javascript - 如何在 Python 中找到使用 Selenium 定位所需元素的正确方法?
- html - 使用引导程序滚动时的粘性列消失在滚动导航栏后面
- karate - 空手道与 SauceLabs 的集成
- python - 熊猫,根据条件用字典键填充值
- validation - Windows Server - 没有 GUI 的验证脚本