Typescript - 多维数组初始化

Fka*_*Fka 61 multidimensional-array typescript

我正在玩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 ???
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以给我任何关于选定地点的提示吗?

Pup*_*ppy 88

您只需要[]实例化一个数组 - 无论其类型如何都是如此.数组是数组类型的事实并不重要.

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

至于第二级,如果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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 数组中有0个项目,因此没有要键入的值或对象. (2认同)

tec*_*000 13

下面是一个初始化 a 的例子boolean[][]

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


小智 9

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

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

const myArray: any[][] = [];
Run Code Online (Sandbox Code Playgroud)

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

myArray.push([<your value goes here>]);
Run Code Online (Sandbox Code Playgroud)

上述内容的一个简短示例如下:

const myArray: string[][] = []; 
myArray.push(["value1", "value2"]);
Run Code Online (Sandbox Code Playgroud)


RMu*_*esi 7

如果你想这样做,请输入:

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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这只是标准的TS代码,对吗?您认为AngularJs的具体内容是什么?我更喜欢这种类型的解决方案.谢谢 (7认同)
  • @WhatWouldBeCool 答案已被编辑以删除 AngularJs 特定代码 (2认同)