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

时间:2014-02-16 20:42:57

标签: javascript jquery arrays json

我正在处理一个问题,我需要在满足某些条件时访问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可能会帮助我吗?

非常感谢任何人花时间实际阅读本文。

问候, 凯文

1 个答案:

答案 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));

其余的应该是一样的。