首页 > 解决方案 > 如何在语义上访问对象键值

问题描述

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+1如果 key 是or ,我想获取值1+D,但是由于键很多,我不想添加更多冗余的语义键。

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

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

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 
    })

我不想这样写。

标签: javascript

解决方案


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

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']);


推荐阅读