如何使用javascript中的数组/objects/JSON轻松访问表格数据?
我正在处理一个问题,当满足某些条件时,我需要访问buitenunit、binnenunit和boiler的值和名称 我有4个这样的不同表(几乎相似),当满足条件时,我需要开始搜索4个表中的1个表中的数据。以这张桌子为例如何使用javascript中的数组/objects/JSON轻松访问表格数据?,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我正在处理一个问题,当满足某些条件时,我需要访问buitenunit、binnenunit和boiler的值和名称 我有4个这样的不同表(几乎相似),当满足条件时,我需要开始搜索4个表中的1个表中的数据。以这张桌子为例 alpha| buitenunit binnenunit boiler ----------------------------------------------------------------- 4200 |
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和boiler(以及它们的值),具体取决于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;
}
var alphas=['4200','6200','8200','11200','14200','17000'];
var buitenunit=['ERLQ004CV3','ERLQ006CV3','ERLQ008CV3','ERLQ011CV3','ERLQ014CV3','ERLQ014CV3','ERLQ016CV3'];
var binnenunit=['EHBH04C3V'、'EHBH08C3V'、'EHBH08C3V'、'EHBH16C3V'、'EHBH16C3V'、'EHBH16C3V'];
var锅炉=['EKHWS200B3V3'、'EKHWS200B3V3'、'EKHWS200B3V3'、'EKHWS200B3V3'、'EKHWS200B3V3'];
var-grid={};
对于(变量i=0;i
但是现在唯一的方法是,如果我已经知道一个单位的名称,那么这个名称取决于alpha值
所以我的问题是:
我如何以一种易于访问的方式存储此类信息。我目前的做法是否正确?我只是想到了JSON,JSON可能会帮助我吗
感谢所有花时间阅读这篇文章的人
问候这个怎么样
首先-构建名称到值的映射。这假设名称和值始终是一对,您可以从另一个中查找一个
// 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;
}
你得到
{ buitenunit: "ERLQ004CV3",
binnenunit: "EHBH04C3V",
boiler: "EKHWS200B3V3",
value: 201}
其中value是所有项的总和
如果需要单独的值,可以通过执行以下操作来使用该项查找它们
var entry = grid[4200]
var binnenunitValue = valueLookupTable[entry.binnenunit];
这是否解决了这个问题
注意:我运行了这个并得到了数学解,但是看起来valueLookupTable
缺少一些数据。我怀疑示例中的表不太完整,因为我注意到所有锅炉记录都是相同的。但是在grid builder代码中,显然有更长的值数组。没关系。如果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));
//如果您使用的是下划线.js或jQuery,则可以使用它们的“extend”方法
var hashMerge=函数(dest,src){
for(src中的var属性){
如果(src.hasOwnProperty(property)){
dest[property]=src[property];
}
}
返回目的地;
};
var buildHash=函数(键、值){
var result={};
var nn=键。长度;
var ii=0;
对于(;ii
其余的应该是相同的。所以您希望通过任何一个(alpha、buitenunit、binnenunit或boiler)查找它?名称和值总是成对的吗?即:EHVH04S18C3V总是表示102?谢谢,这确实是我需要的。我唯一的问题是,我的值也在数组中,如何将它们链接到单位。例如alpha 4200、buitenunit(value=buitenunitvaluearray[0])、BinneUnit(value=BinneUnitValueArray[0])等等。谢谢大家的帮助,顺便说一句,非常清楚!如果BitNunit数组同时存储键/值,可以吗?像这样val BitNunits=[{EHBH04C3V:100},{EHBH04C4V:200}…]
(我在这里编数字,但只是为了看看在概念上是否可行。如果是这样,我想我可以编辑答案来找到解决方案。
// 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));