Typescript-多维数组初始化


76

我在玩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 ???
            }
        }
    }
}

您能给我一些有关所选地点的提示吗?

Answers:


108

您只需要[]实例化一个数组-无论其类型如何,这都是正确的。数组属于数组类型的事实并不重要。

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

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

我无法想象,这里如何保留键入内容。请给我一些例子吗?
Fka

2
数组中有0个项目,因此没有要键入的值或对象。
小狗

我猜应该this.things = [];在构造函数中。
CGFoX

12

如果要输入,请输入:

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代码。
Fka

8
这只是标准的TS代码,对不对?您如何看待AngularJs?我更喜欢这种类型的解决方案。谢谢
什么会酷

1
@WhatWouldBeCool答案已被编辑以删除AngularJs特定代码
mattumotu

12

这是初始化boolean [] []的示例:

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

1

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

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

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

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

myArray.push([<your value goes here>]);

上面的简短示例如下:

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


-3

提防使用push方法,如果不使用索引,它将无法正常工作!

var main2dArray: Things[][] = []

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

仅给出1行数组

采用

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

使您的二维数组正常工作

其他要当心!foreach似乎不适用于2d数组!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.