Typescript - 多维数组初始化

111

我正在使用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 ???
            }
        }
    }
}

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

5个回答

141

无论数组的类型如何,您只需要使用[]来实例化一个数组 - 这是真实的。数组是什么类型并不重要。

在你的循环中的第一层同样适用这个方法。那只是一个数组,[]就是一个新的空数组,任务完成。

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

我无法想象这里是如何保留 typings 的。你能给我一些例子吗? - Fka
2
数组中没有任何元素,因此无法输入任何值或对象。 - Puppy
我猜应该在构造函数中写成this.things = []; - CGFoX

31

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

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

20

如果你想打字做:

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
10
这只是标准的TS代码,对吧?你认为其中有哪些是特定于AngularJs的吗?我更喜欢使用类型定义的解决方法。谢谢。 - What Would Be Cool
2
@WhatWouldBeCool 答案已经被编辑,移除了 AngularJs 特定的代码。 - mattumotu

8
你可以执行以下操作(我认为这很简单,但实际上是正确的)。 对于任何试图找到如何在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)

只返回一个一行数组

使用

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

让你的二维数组工作起来!!!

其他人要小心!foreach 似乎不能与二维数组一起使用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接