Javascript:如何创建多维数组?(需要代码示例)

Javascript:如何创建多维数组?(需要代码示例),javascript,arrays,data-structures,multidimensional-array,Javascript,Arrays,Data Structures,Multidimensional Array,我有一个10行10列的表格。我想定义一个数组,在该数组中,我可以在第5行第3列的位置处放置一个值 值本身是一个包含更多条目的数组。这个数组的条目也是一个数组 例如: Row 1, column 1: My text 1, Link to text 1 My text 2, Link to text 2 Row 4, column 5: My text 3, Link to text 3 Row 6, column 2: My text 1, Link to text

我有一个10行10列的表格。我想定义一个数组,在该数组中,我可以在第5行第3列的位置处放置一个值

值本身是一个包含更多条目的数组。这个数组的条目也是一个数组

例如:

Row 1, column 1:
   My text 1, Link to text 1
   My text 2, Link to text 2

Row 4, column 5:
   My text 3, Link to text 3

Row 6, column 2:
   My text 1, Link to text 1
   My text 2, Link to text 2
   My text 3, Link to text 3
   My text 4, Link to text 4
并非每个表条目都需要定义。一个表元素条目可以有多个条目。一个条目由两个值组成。文本和文本的链接

html表已经定义。现在我想用上面的值(链接)填充它

我的问题是,如何创建一个高效的数据结构,这样我就可以轻松地找到包含条目的表位置(可能不需要循环10行10列)。对于每个条目,我想得到文本+链接的列表

以及如何访问/读取我定义中的每个条目。(将该值放入html表中没有问题。)


如果有人能给我一些代码示例,告诉我如何设置这样的数据结构,我将不胜感激。

如果内存不是问题,请使用数组数组

var table = [];
table.length = 10; // 10 rows;

for (var i = 0; i < array.length; i++) {
    table[i] = [];
    table[i].length = 20; // 20 columns for each row.
}
您甚至可以混合使用散列和数组

var multiArray = [ ['element 0, 0', 'element 0, 1', 'element 0, 2'], ['element 1, 0', 'element 1, 1']];
等等

编辑
[]中的每个符号都是一个数组,因此您只需将它们组合到另一个数组中即可

您可以创建一个简单的包装器以方便调用:

多维数组只是另一个数组中的数组。因此,您可以构建一个包含10个数组的数组,而每个数组中又包含10个数组。然后用
arr[i][j]
获得一个

项目可以表示为对象:

{ name: "foo", link: "bar" }
然后可以像解析
obj.name
obj.link
一样解析这样的项

var multi = (function() {
    var data = [];

    // initialize
    for(var i = 0; i < 10; i++) {
        data[i] = [];
        for(var j = 0; j < 10; j++) {
            data[i][j] = [];
        }
    }

    return {
        get: function(i, j) { // will return an array of items
            return data[i][j];
        },

        push: function(i, j, v) { // will add an item
            data[i][j].push(v);
        },

        clear: function(i, j) { // will remove all items
            data[i][j] = [];
        },

        iterateDefined: function(f) {
            for(var i = 0; i < 10; i++) {
                for(var j = 0; j < 10; j++) {
                    if(data[i][j].length > 0) {
                        f(data[i][j], i, j);
                    }
                }
            }
        }
    };
})();

创建实用工具
对象

var DataTable = {
    source: [],
    setEntry: function(i,j,e) {
      var o ;
        if( !!! ( o = this.source[i] )  ) o = this.source[i] = [] ;
        o[j] = e ;
        return this ;
    },
    getEntry: function(i,j) {
      var o, e = null ;
        if( !! ( o = this.source[i] ) ) e = o[j] || null ;
      return e ;
    }
} ;
其他答案似乎建议将虚拟
Array
s作为未使用坐标的占位符。虽然这没有错,但这是不必要的:如果在JavaScript中的
数组
上设置了一个索引超过当前范围的条目,则
数组
基本上用
未定义的
值填充

var a = [ ] ; // a length is 0
    a[1024] = 1 // a length is now 1025, a[1] is undefined
然后添加所需的值:

DataTable.setEntry( 1, 1, ["My text 1","Link to text 1","My text 2","Link to text 2"] )
.setEntry( 4, 5, ["My text 3","Link to text 3"] ) 
//..
;
以下控制语句将返回坐标的
数组
s或
null
(如果
DataTable.source
不包含给定坐标的嵌套
数组
):


请在此处尝试:


更新:

这是一篇相当老的帖子,但由于我收到了一条解释该代码段的注释,下面是一篇关于类语法的更新和一些其他注释:

类数据表{
数据=[];
构造函数(){
//将方法绑定到此实例
this.setEntry=this.setEntry.bind(this);
this.getEntry=this.getEntry.bind(this);
}
//在给定坐标处设置一个条目(行和列索引对)
setEntry(行索引、列索引、值){
设row=this.data[rowIndex];
//如果行尚不存在,则延迟创建该行
如果(行的类型==='undefined'){
此.data[rowIndex]=[];
row=this.data[rowIndex];
}
//设置值
行[列索引]=值;
}
//获取给定坐标处的条目(行和列索引对)
getEntry(行索引、列索引){
const row=this.data[rowIndex];
//测试行是否已定义;如果未定义,则返回null。
if(typeof row==='undefined'){return null;}
否则{
//返回值或返回null
返回行[列索引]| | null;
}
}
}
const d=新数据表();
d、 setEntry(1,1,[“我的文本1”,“链接到文本1”,“我的文本2”,“链接到文本2”]);
d、 setEntry(4,5,[“我的文本3”,“链接到文本3”);
log(`d.getEntry(4,5)=${d.getEntry(4,5)}`);
log(`d.getEntry(1,1)=${d.getEntry(1,1)}`);

log(`d.getEntry(0,0)=${d.getEntry(0,0)}`)JS中所有列的长度都相同并不重要,我喜欢itAm,我知道使用这种表示法,我必须定义每个表行+列,即使我不需要某个字段?@Enkidu你说的“即使我不需要某个字段”是什么意思?你的第二个例子是我已经在试验过的。我没有问题附加一个简单的字符串,例如“table[1][3]=“hello world”;”。但是我在附加数组时遇到了问题。我尝试使用表[1][3]=新数组(新数组('text1','link1')、新数组('text2','link2'));但我不知道如何获取这些值。。。顺便说一句,除了“newarray()”,我还可以写[a,b]?这看起来真的很聪明!:)但我的问题是,我不想访问表中的某个字段,只想获取定义的字段的值。(100个有价值的人中可能只有20个)太棒了!Tnx!似乎正是我想要的!:)Tnx。我以前从未使用过这种编码。但它似乎正是我在寻找的,正是我在寻找的。有点难理解,如果可能的话,请您解释一下这部分的setEntry和getEntry@Dileephell我使用类语法添加了一个更新,并添加了一些注释。
var a = [ ] ; // a length is 0
    a[1024] = 1 // a length is now 1025, a[1] is undefined
DataTable.setEntry( 1, 1, ["My text 1","Link to text 1","My text 2","Link to text 2"] )
.setEntry( 4, 5, ["My text 3","Link to text 3"] ) 
//..
;
console.log("(!!) d.source: " + DataTable.getEntry(4,5) ) ;
console.log("(!!) d.source: " + DataTable.getEntry(1,1) ) ;
console.log("(!!) d.source: " + DataTable.getEntry(0,0) ) ;