首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从语义上访问对象键值

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

Stack Overflow用户
提问于 2020-06-12 08:09:18
回答 5查看 83关注 0票数 0
代码语言:javascript
运行
复制
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 
})

如果键是D+11+D,我希望得到值,但是由于有很多键,所以我不想添加更多冗余语义键。

我试图对给定的密钥进行排序,'1+D'.split('').sort().join('').toUpperCase() // +1D,但它是+1D而不是D+1

问题是要访问所有的键,而不是D+1,这是一个具体的例子。

代码语言:javascript
运行
复制
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 
    })

我不想这样写。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-06-12 08:23:09

如果有必要,您可以使用Proxy并使用反向密钥。

代码语言:javascript
运行
复制
const
    COMPUTE_CODES = { 'D+1': '0011111', 'A+1': '0110111', 'D-1': '0001110', 'A-1': '0110010', 'D+A': '0000010', 'D-A': '0010011', 'A-D': '0000111' },
    codes = new Proxy(COMPUTE_CODES, {
        get: function(target, prop, receiver) {
            return prop in target
                ? target[prop]
                : target[prop.split(/([+-])/).reverse().join('')];
        }
    });
    

console.log(codes['1+D']);

票数 6
EN

Stack Overflow用户

发布于 2020-06-12 08:19:20

试试给你的钥匙。如果它不存在,将其翻转到+-字符并尝试。

代码语言:javascript
运行
复制
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];
}
票数 2
EN

Stack Overflow用户

发布于 2020-06-12 08:21:46

只需检查直线和反向

代码语言:javascript
运行
复制
function getCode(code){
 return COMPUTE_CODES[code] || COMPUTE_CODES[code.split('').reverse().join('')]
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62340134

复制
相关文章

相似问题

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