我正在寻找具有
的数组的数组声明,初始化和访问一个表/数组(及其行)将如下所示:
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.访问
谢谢你。
答案 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.