具有自定义类的多维数组

时间:2019-06-09 16:37:42

标签: typescript

我正在寻找具有

的数组的数组声明,初始化和访问

一个表/数组(及其行)将如下所示:

    CusomClass1Instance;Number;CusomClass2Instance
    CusomClass1Instance;Number;CusomClass2Instance
    CusomClass1Instance;Number;CusomClass2Instance
    CusomClass1Instance;Number;CusomClass2Instance
...

我以前这样声明它:

let result: [CusomClass1Instance, Number, CusomClass2Instance][] 

要初始化,我尝试过类似的事情:

result= [[new CusomClass1Instance(_id)], [new Number()], [new CusomClass2Instance(_id)]][];

(在这种情况下)我遇到麻烦: 1.初始化为空 2.写(使用推,索引) 3.访问

谢谢你。

1 个答案:

答案 0 :(得分:1)

let result: [CusomClass1Instance, Number, CusomClass2Instance][]

这是一个“元组”数组,Typescript用来表示一个定长数组,每个元素的类型可能不同。外部数组的每个元素都是一个包含三个元素的数组:CusomClass1Instance,Number和CustomClass2Instance。这使其成为一个数组数组,但是外部数组每行只有一个元素

// incorrect
result=[[new CusomClass1Instance(_id)], [new Number()], [new CusomClass2Instance(_id)]][];

在这里,您将其分配给一个三元素数组,其中三个元素中的每一个都是一个数组。即使在分配作业时,您也要在末尾应用一组空的方括号。无论如何,这种语法更接近于不同的结构,其中外部数组每列有一个元素

初始化

设置数组类型后,Typescript很高兴让您将空数组设置为初始化程序:

result = [];

如果要非空初始化它,也可以这样做,但是必须将其分配给三元素数组:

result = [[new CusomClass1Instance(_id), new Number(), new CusomClass2Instance(_id)]];

请注意,您使用的是两组方括号:外部方括号用于元组数组,内部方括号用于定义元组。另请注意,您可能不需要呼叫new Number(),而只需传递数字即可:

result = [
    [new CusomClass1Instance(id1), 1, new CusomClass2Instance(id1)],
    [new CusomClass1Instance(id2), 2, new CusomClass2Instance(id2)]
];

修改和访问

您可以推送到结果数组,但是需要确保所推送的每个元素都是匹配的三元素元组。

result.push([new CusomClass1Instance(_id), new Number(), new CusomClass2Instance(_id)]);

这在您访问它时也适用:

let threeElementArray = result[index];
threeElementArray[0] // CusomClass1Instance
threeElementArray[1] // number
threeElementArray[2] // CusomClass2Instance

并且您可以使用拆包/解构语法来简化此操作:

let [class1, yourNumber, class2] = result[index];
// Now you have one variable per value, without defining an explicit
// threeElementArray variable.