Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript中的数组/objects/JSON轻松访问表格数据?_Javascript_Jquery_Arrays_Json - Fatal编程技术网

如何使用javascript中的数组/objects/JSON轻松访问表格数据?

如何使用javascript中的数组/objects/JSON轻松访问表格数据?,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我正在处理一个问题,当满足某些条件时,我需要访问buitenunit、binnenunit和boiler的值和名称 我有4个这样的不同表(几乎相似),当满足条件时,我需要开始搜索4个表中的1个表中的数据。以这张桌子为例 alpha| buitenunit binnenunit boiler ----------------------------------------------------------------- 4200 |

我正在处理一个问题,当满足某些条件时,我需要访问buitenunit、binnenunit和boiler的值和名称

我有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和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));