2d数组,例如具有习俗浮点索引的datastruct

时间:2018-08-12 15:10:26

标签: javascript arrays data-structures internet-explorer-8

我想创建一个具有2d数组特征的数据结构(获取带有2个x和y输入的特定项),但不使用Javascript中的常规int索引。

例如:我有一个这样的表:

x   200  250 370 500 ...
2   1023 234  22 243
2.5 2323 333 322 223
3.1  ...
...

我想借助数字370、2.5获得输出322。

编写此代码的最佳方法是什么?是否存在可以使用并可能需要更改的现有数据结构,或者我必须编写新的东西?我找不到满足我需求的任何易于使用的东西。

它必须在IE8中工作

修改 数据来自excelsheet。 数据没有“空洞”,因此它是一个完整的块,但是某些x值的y值比其他值大(更高的x值具有更多或相同数量的y值,永远不会更少)

2 个答案:

答案 0 :(得分:1)

您可以将x值作为键并嵌套y值作为嵌套对象。通过

访问
data[x][y]

var data = {
        200: {
            2: 1023,
            2.5: 2323
        },
        250: {
            2: 234,
            2.5: 333
        },
        370: {
            2: 22,
            2.5: 322
        },
        500: {
            2: 243,
            2.5: 223
        }
    };


console.log(data[200][2.5]);

答案 1 :(得分:1)

另一种解决方案可能是在数组中实际包含整个表(包括或不包括标题),然后为行或整数坐标设置一个查找对象。

var table = [
  [ 'x', 200, 250 ]
  [ 2, 1023, 234 ]
]

var xlookup = { 2: table[1] }
// or
var xlookup = { 2: 1 }

var ytable = { 200: 1, 250: 2 }

或者没有标题:

var table = [
  [ 1023, 234 ]
  [ 232, 333
]

var xlookup = { 2: table[0] }
// or
var xlookup = { 2: 0 }

var ytable = { 200: 0, 250: 1 }

这将使您可以更轻松地遍历表格,例如呈现表格。

而且,这对于IE8用户可能尤其重要,它将防止ykey的重复,例如2和2.5,从而使内存大小更小。

或者,使用Nina Scholz solution,您可以拥有一系列的键来进行迭代:

var data = {
        200: {
            2: 1023,
            2.5: 2323
        },
        250: {
            2: 234,
            2.5: 333
        },
        370: {
            2: 22,
            2.5: 322
        },
        500: {
            2: 243,
            2.5: 223
        }
    };

var xkeys = [ 200, 250, 370, 500 ]
var ykeys = [ 2, 2.5 ]