Javascript 如何从语义上访问对象键值

Javascript 如何从语义上访问对象键值,javascript,Javascript,如果key是D+1或1+D,我想得到值,但是因为有很多键,我不想添加更多冗余的语义键 我尝试对给定的键进行排序,'1+D'。拆分(''..sort().join('..toUpperCase()/+1D),但它是+1D而不是D+1 问题是访问所有密钥,而不是D+1,这是一个具体的示例 const COMPUTE_CODES = Object.freeze({ 'D+1': '0011111', 'A+1': '0110111', 'D-1': '0001110', 'A-1':

如果key是
D+1
1+D
,我想得到值,但是因为有很多键,我不想添加更多冗余的语义键

我尝试对给定的键进行排序,
'1+D'。拆分(''..sort().join('..toUpperCase()/+1D
),但它是
+1D
而不是
D+1

问题是访问所有密钥,而不是
D+1
,这是一个具体的示例

const COMPUTE_CODES = Object.freeze({
  'D+1': '0011111',
  'A+1': '0110111',
  'D-1': '0001110',
  'A-1': '0110010',
  'D+A': '0000010',
  'D-A': '0010011',
  'A-D': '0000111'
  // more 
})

我不想这样写。

试试给定的键。如果它不存在,请在
+
-
字符周围翻转它,然后重试

const COMPUTE_CODES = Object.freeze({
      'D+1': '0011111',
      '1+D': '0011111',
      'A+1': '0110111',
      '1+A': '0110111',
      'D-1': '0001110',
      '1-D': '0001110',
      'A-1': '0110010',
      '1-A': '0110010',
      // more 
    })
const COMPUTE\u code=Object.freeze({
“D+1”:“0011111”,
“A+1”:“0110111”,
“D-1”:“0001110”,
“A-1”:“0110010”,
“D+A”:“0000010”,
“D-A”:“0011”,
“A-D”:“0000111”
//更多
})
函数get(键){
返回计算代码[key]| |计算代码[reverseKey(key)]
}
功能反转键(键){
常量分隔符=键字符(1)
常量[第一,第二]=键拆分(分隔符)
返回`${second}${separator}${first}`
}

log(get('1+D'))
只需直接和反向检查即可

函数getCode(代码){ 返回COMPUTE_code[code]| COMPUTE_code[code.split(“”).reverse().join(“”)] } 如有必要,您可以选择一把钥匙并使用反向钥匙

const
计算代码={'D+1':'0011111','A+1':'0110111','D-1':'0001110','A-1':'011010','D+A':'0000010','D-A':'0010011','A-D':'0000111'},
代码=新代理(计算代码{
获取:功能(目标、道具、接收器){
返回目标中的道具
?目标[道具]
:目标[prop.split(/([+-])/).reverse().join(“”)];
}
});
日志(代码['1+D'])您可以使用它

const semanticGetterForProps={
get:(obj,name)=>obj[name]| | obj[[…name].reverse().join(“”)
};
const COMPUTE_code=新代理({
“D+1”:“0011111”,
“A+1”:“0110111”,
“D-1”:“0001110”,
“A-1”:“0110010”,
“D+A”:“0000010”,
“D-A”:“0011”,
‘A-D’:‘0000111’,
},语义标记形式);
日志(计算代码[“1+D”]);
console.log(计算代码[“D+1]”);
console.log(计算代码[“1-A”]);
控制台日志(计算代码[“A-1”]);
日志(计算代码[“A+1]”)

作为控制台包装{top:0;max height:100%!important;}
当key为
D+1
1+D
时,我想获得值
0011111
。编写一个函数来规范化该键,这样
1+D
将转换为
D+1
。然后使用
COMPUTE\u code[canonical\u key(key))
@mplungjan我不认为这只是一对,我想他希望这对任何blah1+blah2都有效。你从“因为我有很多键,我不想添加更多冗余语义键”中得到了什么这似乎是在谈论一个更普遍的问题。键总是吗?或者这里的一般模式是什么?使用
.split
,使用
reverseKey
函数似乎是一个滥杀滥伤。您可以简单地执行
const[first,separator,second]=key;
并跳过拆分并查找分隔符。
function get_compute_code(key) {
    if (key in COMPUTE_CODES) {
        return COMPUTE_CODES[key];
    }
    // try flipping the key around
    key = key.replace(/^(.*)([-+])(.*)/, '$3$2$1')
    return COMPUTE_CODES[key];
}