javascript - 如何从 TypeScript / JavaScript String Literal Types 中针对单个位求和选择特定值?
问题描述
如何从 TypeScript / JavaScript String Literal Types 中针对单个位求和选择特定值?作为助手,可以使用按位键的文字类型映射:1、2、4、8,...我不确定如何将结果/返回值放在一起,以便返回与给定类型兼容的结果.
变体 1:
const result: "Aaa" | "Bbb" | "Ccc" | "Ddd" = selectByBitwiseSum1(5);
// THE EXPECTED RESULT:
result = "Aaa" | "Ccc";
export function selectByBitwiseSum1(bitwiseSum: number): "Aaa" | "Bbb" | "Ccc" | "Ddd" {
var result;
var optMap = [ {key: 1, val: "Aaa"},
{key: 2, val: "Bbb"},
{key: 4, val: "Ccc"},
{key: 8, val: "Ddd"} ];
// THE DESIRED CONVERSION PLEASE TO RETURN GIVEN TYPE (NOT STRING ARRAY)
result = ???
// THE EXPECTED RESULT:
//result = "Aaa" | "Ccc";
return result;
}
变体 2 - 数组类型:
const result: ("Aaa" | "Bbb" | "Ccc" | "Ddd")[] = selectByBitwiseSum2(5);
result = ("Aaa" | "Ccc")[];
export function selectByBitwiseSum2(bitwiseSum: number): ("Aaa" | "Bbb" | "Ccc" | "Ddd")[] {
var result;
var optMap = [ {key: 1, val: "Aaa"},
{key: 2, val: "Bbb"},
{key: 4, val: "Ccc"},
{key: 8, val: "Ddd"} ];
// THE DESIRED CONVERSION PLEASE TO RETURN GIVEN TYPE (NOT STRING ARRAY)
result = ???
// THE EXPECTED RESULT:
//result = ("Aaa" | "Ccc")[];
return result;
}
解决方案
你可以用这个单线做所有的事情
const arr="AAA,BBB,CCC,DDD,EEE,FFF".split(",");
console.log((5).toString(2).split("").reverse()
.reduce((a,c,i)=>(!+c||a.push(arr[i]),a),[]).join(" | "))
!+c||a.push(are[i],a
可能值得稍微解释一下:c
是数字的二进制表示的单个数字(“0”或“1”)5
,从“最低有效位”开始(因为我.reverse()
是数组)。前面+
的 将字符串转换为整数,否定运算符!
将其转换为true
or false
。||
仅当第一个表达式为 时,才会执行以下运算符之后的部分false
。
推荐阅读
- python - PysimpleGUI 中的更新标签未发生
- javascript - 获取父级 (li) 的 id 及其内容 (span)。凯里奥
- reactjs - 在“Redux-Saga”中使用“React Navigation 6.0”重定向用户
- node.js - 应该如何部署我的 mern 应用程序
- linux - 如何为树莓派 pi4 配置 hdmi0 和 hdmi1 togheter?
- .htaccess - 使用 .htaccess 文件和 php 引发 404 错误
- javascript - 获取剂量带来任何数据
- html - 如何设计一组对象
- reactjs - 如何在一个标签中添加多个事件?
- list - ScrollViews 中的嵌套平面列表不滚动?