2015-10-04 105 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} 
相關問題