在Java中,我有这样的东西:
public class MyMatrix implements Map<Long, Map<Long, Set<MyObject>>> {...}
我想做的是在TypeScript中声明此Map的相应类型。
对应的JSON是:
{
"1":{
"1":[{"id":1},{"id":2}]
},
"2":{
"1":[{"id":2},{"id":3}]
}
}
我希望能够使用关联数组表示法访问它,例如myArray[1][1] should return [{"id":1},{"id":2}]
我尝试使用类似
var myMatrix: Array<Array<Array<MyObjec>>>;
但没有运气。
尝试以下代码时:
for (const x in Object.keys(this.myMatrix)) {
for (const y in Object.keys(this.myMatrix[x])) {
}
}
在第二个for循环上出现以下错误:
ERROR TypeError: Cannot convert undefined or null to object
at Function.keys (<anonymous>)
希望我发现了一些提示:该错误的原因似乎是在第一个循环中Object.keys
从'0'
开始而不是'1'
这对我来说甚至很陌生。
答案 0 :(得分:1)
HugoTeixeira的类型对我来说很正确。这段代码:
for (const x in Object.keys(this.myMatrix)) {
for (const y in Object.keys(this.myMatrix[x])) {
}
}
应为:
for (const x of Object.keys(this.myMatrix)) {
// ^^
for (const y of Object.keys(this.myMatrix[x])) {
}
}
答案 1 :(得分:0)
您可以为每个图层创建一种类型,如下所示:
interface Column {
id: number;
}
interface Row {
[key: number]: Array<Column>;
}
class Matrix {
[key: number]: Row;
}
然后您可以创建一个像这样的矩阵:
const myMatrix: Matrix = {
"1":{
"1":[{"id":1},{"id":2}]
},
"2":{
"1":[{"id":2},{"id":3}]
}
};
通过Typescript代码,您可以根据需要使用关联数组符号访问Matrix:
const arr = myMatrix[1][1];
console.log(JSON.stringify(arr));
此打印:
[{"id":1},{"id":2}]
答案 2 :(得分:0)
我们可以在Typescript中声明Maps,因此您可以尝试使用如下所示的内容,然后使用foreach对其进行迭代。
var dataMap = new Map<number, Map<number,Array<Obj>>>();