我有一些基于状态的规则查找。我试图想办法让访问这些很容易,而不需要设置某种中间步骤。
我想象的是:
static int a
我知道那是不可能的......但是想知道实现类似目标的最简单方法是什么
答案 0 :(得分:6)
从MySQL的外键中获取一页:
var states = {
'AK' : 1,
'FL' : 1,
'NY' : 1,
'CA' : 2,
'LA' : 2,
'TX' : 2
}
var rules = {
1 : 278,
2 : 422
}
然后你可以像这样引用规则:
console.log(rules[states['AK']]);
答案 1 :(得分: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}
答案 2 :(得分: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
答案 3 :(得分:1)
如果您真的想要接近您显示的结构,请将rules
定义为数组:
var rules = [
[['AK','FL','NY'], {a: 278}],
[['CA','LA','TX'], {a: 422}]
];
然而,访问它会有点麻烦:
function find_rule(state) {
for (var [states, rule] of rules) {
if (states.indexOf(state) >= 0) return rule;
}
return -1;
}
或没有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;
}
答案 4 :(得分: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"]
答案 5 :(得分: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}