2015-10-04 96 views
1

我有一些基于状态的规则查找..我想要一种方法来使访问这些很容易,而无需设置某种中间步骤。如何影响具有相同值的多个键的对象

我想象的是这样的:

rules = { 
    ['AK','FL','NY']: {a: 278}, 
    ['CA','LA','TX']: {a: 422} 
} 
console.log(rules['AK']); //278 
console.log(rules['TX']); //422 

我知道这是不可能的..但不知道会是怎样实现类似的东西,最简单的方法

+4

你为什么不分配相同的对象几个键? – enpenax

回答

6

采取从MySQL的外键的页面:

var states = { 
    'AK' : 1, 
    'FL' : 1, 
    'NY' : 1, 
    'CA' : 2, 
    'LA' : 2, 
    'TX' : 2 
} 

var rules = { 
    1 : {a : 278}, 
    2 : {a : 422} 
} 

那么你可以参考的规则,像这样:

console.log(rules[states['AK']]); 
1

我知道这是一个特别的解决方案。只是想分享它。

function Store() { 
    var cache = {}; 
    this.set = function(key, value) { 
    var k = JSON.stringify(key); 
    cache[k] = value; 

    }; 
    this.get = function(key) { 
    for(var k in cache) { 
     if(cache.hasOwnProperty(k)) { 
     var _k = JSON.parse(k); 
     if(_k.indexOf(key) !== -1) return cache[k]; 
     } 
    } 
    return null; 
    } 
} 

var store = new Store; 

store.set(['AK','FL','NY'], {a:278}); 
store.get('AK'); // returns {a:278} 
+0

var store = new Store(); –

+0

'()'是可选的。如果没有参数,则可以简单地忽略它们。 – 2015-10-04 05:46:27

1

影响使用同样的规则键:

var rule1 = {a : 278}; 
var rule2 = {a : 422}; 

var rules = { 
    'AK' : rule1, 
    'FL' : rule1, 
    'NY' : rule1, 
    'CA' : rule2, 
    'TX' : rule2 
}; 

console.log(rules['AK']); // {a:278} 
console.log(rules['AK'].a); // 278 

https://jsfiddle.net/sb5az0v5/

1

如果你真的想要的东西靠近你展示结构,定义rules为数组:

var rules = [ 
    [['AK','FL','NY'], {a: 278}], 
    [['CA','LA','TX'], {a: 422}] 
]; 

但是,访问这将是有点麻烦:

​​

或者不ES6:

function find_rule(state) { 
    for (var i = 0; i < rules.length; i++) { 
    var rule = rules[i]; 
    if (rule[0].indexOf(state) >= 0) return rule[1]; 
    } 
    return -1; 
} 
0

var rules = { 
 
    "['AK','FL','NY']": {a: 278}, 
 
    "['CA','LA','TX']": {a: 422} 
 
}; 
 
var key = 'AK'; 
 
key = Object.keys(rules).filter(function (val) { 
 
    return val.indexOf(key) !== -1; 
 
}).join(","); 
 

 

 
console.log("result: ", rules[key]);//result: {a: 278} 
 
console.log("key: ", JSON.parse(key.replace(/'/g, '"')));//key: ["AK", "FL", "NY"]

0

我没有这样的事情

var rules = { 
//Data 
    "['AK','FL','NY']": {a: 278}, 
    "['CA','LA','TX']": {a: 422}, 
    BA: {a: 111}, 
    BC: {a: 222}, 
//Function 
    getKey: function(key){ 
     return Object.keys(this).find((val) => { 
     return val.replace(/(\[|\]|'|")/g,'') 
      .split(',') 
      .includes(key) 
     } 
    ) 
    }, 
    get: function(key){ 
     return this[this.getKey(key)] 
    } 
} 

console.log(rules.get('AK')) //{a: 278} 
console.log(rules.get('BA')) //{a: 111} 
相关问题