我正在处理一个问题,我需要在满足某些条件时访问buitenunit,binnenunit和锅炉的值和名称。
我有4个不同的表(几乎相似),当满足条件时,我需要开始在4个表中的1个中搜索数据。以此表为例。
alpha| buitenunit binnenunit boiler
-----------------------------------------------------------------
4200 | ERLQ004CV3(value=100) EHBH04C3V(value=101) EHVH04S18C3V=(102)
6200 | ERLQ006CV3(value=200) EHBH04C3V(value=101) EHVH04S18C3V=(102)
8200 | ERLQ008CV3(value=300) EHBH04C3V(value=101) EHVH04S18C3V=(102)
11200| ERLQ011CV3(value=400) EHBH04C3V(value=101) EHVH04S18C3V=(102)
14200| ERLQ014CV3(value=500) EHBH04C3V(value=101) EHVH04S18C3V=(102)
现在我需要相应的buitenunit,binnenunit和锅炉(及其值),具体取决于alpha值。
例如,假设alpha为4200,那么我需要显示:“您选择的设置将是ERLQ004CV3,EHBH04C3V和EHVH04S18C3V,它将花费您(100 + 101 + 102)303个硬币。
目前我真的很困惑如何获得价值和名称,以便我可以轻松访问它们。
这就是我现在所拥有的:
var alphas = ['4200', '6200', '8200', '11200', '14200', '17000'];
var buitenunit = ['ERLQ004CV3', 'ERLQ006CV3', 'ERLQ008CV3', 'ERLQ011CV3', 'ERLQ014CV3', 'ERLQ016CV3'];
var binnenunit = ['EHBH04C3V', 'EHBH08C3V', 'EHBH08C3V', 'EHBH16C3V', 'EHBH16C3V', 'EHBH16C3V'];
var boiler = ['EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3'];
var grid = {};
for(var i = 0; i < alphas.length; i++){
var alpha = alphas[i];
if(alpha in grid == false){
grid[alpha] = {};
}
var buitenunit = buitenunitlinksboven[i];
grid[alpha][buitenunit] = i;
var binnenunit = binnenunitlinksboven[i];
grid[alpha][binnenunit] = i;
var boiler = boilerlinksboven[i];
grid[alpha][boiler] = i;
}
但现在访问该值的唯一方法是,如果我已经知道单位的名称。名称取决于alpha值。
所以我的问题是: 如何以易于访问的方式存储此类信息。我目前正走在正确的轨道上吗?我只是想到了JSON,JSON可能会帮助我吗?
非常感谢任何人花时间实际阅读本文。
问候, 凯文
答案 0 :(得分:1)
这个怎么样?
首先 - 为值构建名称映射。这假定名称和值始终是一对,您可以从另一个中查找。
// first build a map of names to their value
var valueLookupTable = {
ERLQ004CV3:100,
ERLQ006CV3:200,
ERLQ008CV3:300,
ERLQ011CV3:400,
ERLQ014CV3:500,
EHBH04C3V:101,
EHVH04S18C3V:102
};
然后你的网格构建器看起来更像这个
var alphas = ['4200', '6200', '8200', '11200', '14200', '17000'];
var buitenunit = ['ERLQ004CV3', 'ERLQ006CV3', 'ERLQ008CV3', 'ERLQ011CV3', 'ERLQ014CV3', 'ERLQ016CV3'];
var binnenunit = ['EHBH04C3V', 'EHBH08C3V', 'EHBH08C3V', 'EHBH16C3V', 'EHBH16C3V', 'EHBH16C3V'];
var boiler = ['EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3'];
var grid = {};
var nn = alphas.length;
var ii = 0;
for(; ii < nn; ++ii) {
var alpha = alphas[ii]
var entry = {
buitenunit : buitenunit[ii],
binnenunit : binnenunit[ii],
boiler : boiler[ii]
}
/** compute value for that entry by looking up values in the lookup table */
var val = 0;
for(var key in entry) {
val += (valueLookupTable[entry[key]] || 0)
}
entry.value = val;
grid[alpha] = entry;
}
现在你做的时候
grid[4200]
你得到了
{ buitenunit: "ERLQ004CV3",
binnenunit: "EHBH04C3V",
boiler: "EKHWS200B3V3",
value: 201}
其中value是所有项目的总和。
如果您需要单独的值,可以通过执行类似
的操作来查找它们var entry = grid[4200]
var binnenunitValue = valueLookupTable[entry.binnenunit];
这是否解决了这个问题?
注意:我运行了这个并为我计算了数学,但看起来valueLookupTable
缺少一些数据。我怀疑你的例子中的表格并不完整,因为我注意到所有的锅炉记录都是一样的。但是在网格构建器代码中,显然存在更长的值数组。不管。如果valueLookupTable
包含所有这些,那么剩下的就应该没问题。它只是意味着你需要使用正确的值来充实该表。
如果单元数组具有相应的值数组,则可以使用以下内容基于数组构建valueLookupTable
,如下所示:
// if you're using underscore.js or jQuery you could use their `extend` method
var hashMerge = function(dest, src) {
for (var property in src) {
if (src.hasOwnProperty(property)) {
dest[property] = src[property];
}
}
return dest;
};
var buildHash = function(keys,values) {
var result = {};
var nn = keys.length;
var ii = 0;
for (; ii < nn; ++ii) {
result[keys[ii]]=values[ii];
}
return result;
};
var alphas = ['4200', '6200', '8200', '11200', '14200', '17000'];
var buitenUnits = ['ERLQ004CV3', 'ERLQ006CV3', 'ERLQ008CV3', 'ERLQ011CV3', 'ERLQ014CV3', 'ERLQ016CV3'];
var buitenValues = [ 100, 200, 300, 400, 500, 600 ];
var binnenUnits = ['EHBH04C3V', 'EHBH08C3V', 'EHBH08C3V', 'EHBH16C3V', 'EHBH16C3V', 'EHBH16C3V'];
var binnenValues = [ 101, 201, 301, 401, 501, 601 ];
var boilerUnits = ['EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3', 'EKHWS200B3V3']
var boilerValues = [ 102, 202, 302, 402, 502, 602 ];
var buittens = buildHash(buitenUnits, buitenValues);
var binnens = buildHash(binnenUnits, binnenValues);
var boilers = buildHash(boilerUnits, boilerValues);
var valueLookupTable = hashMerge( buittens, hashMerge(binnens, boilers));
其余的应该是一样的。