Javascript 如何从语义上访问对象键值
如果key是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':
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];
}