首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >得到正确的数字

得到正确的数字
EN

Stack Overflow用户
提问于 2020-05-05 11:53:49
回答 1查看 44关注 0票数 0

很抱歉标题很差,但我甚至不能正确地命名问题,因此无法找到解决方案,我只能描述我正在努力实现的目标。

我有一份发动机类型的清单&它们的燃料。

代码语言: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)这样的事情,我应该得到’汽油‘,’电动‘回来。

意思是9是-> 8(电动)+1(汽油)

如何做到这一点?请帮帮我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-05 12:06:11

如果您在decomposing an arbitrary number into bits上引用链接问题中的一个答案,那么您所需要做的就是使用Array.prototype.map返回一个引擎类型数组,其键位于返回的位数组中。

有些人抓到了:

  • 您应该使用0键,因为在最后的分解步骤中,您将始终以0的余数结束。如果坚持这样做,那么您将需要在方法中保护子句,如果值为0
  • In,则返回["HYBRID"] --在engineTypes中不存在键的事件中,将得到undefined。可以很容易地通过过滤映射的数组来绕过它。

见下文的概念证明:

代码语言:javascript
复制
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)); // []

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61612514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档