Typescript - 多维数组初始化

Posted

技术标签:

【中文标题】Typescript - 多维数组初始化【英文标题】:Typescript - multidimensional array initialization 【发布时间】:2015-07-20 14:16:06 【问题描述】:

我正在玩 Typescript,我想知道如何正确实例化和声明多维数组。这是我的代码:

class Something 
    private things: Thing[][];

    constructor() 
        things = [][]; ??? how instantiate object ???

        for(var i: number = 0; i < 10; i++) 
            this.things[i] = new Thing[];   ??? how instantiate 1st level ???
            for(var j: number = 0; j< 10; j++) 
                this.things[i][j] = new Thing();   ??? how instantiate 2nd lvl item ???
            
        
    

你能给我一些关于选定地点的提示吗?

【问题讨论】:

【参考方案1】:

你只需要[] 来实例化一个数组——不管它的类型如何,这都是真的。数组是数组类型这一事实无关紧要。

同样的事情也适用于循环的第一级。它只是一个数组,[] 是一个新的空数组 - 工作完成。

至于第二级,如果Thing 是一个类,那么new Thing() 就可以了。否则,根据类型,您可能需要工厂函数或其他表达式来创建。

class Something 
    private things: Thing[][];

    constructor() 
        this.things = [];

        for(var i: number = 0; i < 10; i++) 
            this.things[i] = [];
            for(var j: number = 0; j< 10; j++) 
                this.things[i][j] = new Thing();
            
        
    

【讨论】:

我无法想象,打字是如何保存在这里的。请给我一些例子好吗? 数组中有 0 项,因此没有要输入的值或对象。 我猜,构造函数中应该是this.things = [];【参考方案2】:

如果你想输入:

class Something 

  areas: Area[][];

  constructor() 
    this.areas = new Array<Array<Area>>();
    for (let y = 0; y <= 100; y++) 
      let row:Area[]  = new Array<Area>();      
      for (let x = 0; x <=100; x++)
        row.push(new Area(x, y));
      
      this.areas.push(row);
    
  

【讨论】:

谢谢,但并不是每个人都在使用 AngularJs 编写 JS/TS 代码。 这只是标准的 TS 代码,对吧?你认为 AngularJs 是什么?我更喜欢这种带有类型的解决方案。谢谢 @WhatWouldBeCool 已编辑答案以删除 AngularJs 特定代码【参考方案3】:

注意push方式的使用,不使用索引就不行!

var main2dArray: Things[][] = []

main2dArray.push(someTmp1dArray)
main2dArray.push(someOtherTmp1dArray)

只给出一个 1 行数组

使用

main2dArray[0] = someTmp1dArray
main2dArray[1] = someOtherTmp1dArray

让您的二维数组正常工作!!!

其他注意! foreach 似乎不适用于 2d 数组

【讨论】:

【参考方案4】:

这里是一个初始化boolean[][]的例子:

const n = 8; // or some dynamic value
const palindrome: boolean[][] = new Array(n)
                                   .fill(false)
                                   .map(() => 
                                     new Array(n).fill(false)
                                   );

【讨论】:

【参考方案5】:

您可以执行以下操作(我觉得这很简单,但实际上是正确的)。 对于任何试图找到如何在 TypeScript 中初始化二维数组的人(比如我自己)。

假设您要初始化任何类型的二维数组。您可以执行以下操作

const myArray: any[][] = [];

稍后,当您想要填充它时,您可以执行以下操作:

myArray.push([&lt;your value goes here&gt;]);

上面的一个简短示例如下:

const myArray: string[][] = [];myArray.push(["value1", "value2"]);

【讨论】:

以上是关于Typescript - 多维数组初始化的主要内容,如果未能解决你的问题,请参考以下文章

关于多维数组的注意事项

初始化多维数组

多维数组初始化

在 Java 中初始化多维数组

初始化多维数组

Java数组声明创建和使用以及多维数组Arrays类稀疏数组