Javascript 是否可以定义包含对象的对象?
我有一个目标:Javascript 是否可以定义包含对象的对象?,javascript,typescript,Javascript,Typescript,我有一个目标: var a = { "1":{"topicId":1, "subTopicId":1, "topicName":"x", "subTopicName":"x"}, "2":{"topicId":1, "subTopicId":2, "topicName":"x", "subTopicName":"x"}, "62":{"topicId":10, "subTopicId":62,
var a = {
"1":{"topicId":1,
"subTopicId":1,
"topicName":"x",
"subTopicName":"x"},
"2":{"topicId":1,
"subTopicId":2,
"topicName":"x",
"subTopicName":"x"},
"62":{"topicId":10,
"subTopicId":62,
"topicName":"x",
"subTopicName":"x"}
}
我意识到我可以像这样定义内部对象:
interface IData {
topicId: number;
subTopicId: number;
topicName: string;
subTopicName; string;
}
但是有没有一种方法可以定义可以有任意数量的IData对象的整个对象呢?哎呀,忽略了
typescript
标签。。有关解析JSON(可能是服务器输出的、从配置文件中读取的)的方法,请参阅备选答案。以下是如何在纯javascript中实现这一点:
在对象内使用数组属性
然后将每个数组元素设置为IData对象的一个实例
var a = { Topics: [] }; // define container with empty Topics array
// add some topics
a.Topics[1] = { topicId: 1, subTopicId: 1, topicName: "x", subTopicName: "x" };
a.Topics[2] = { topicId: 1, subTopicId: 2, topicName: "x", subTopicName: "x" };
a.Topics[62] = { topicId: 10, subTopicId: 62, topicName: "x", subTopicName: "x" };
然后访问以下对象:
interface IData {
topicId: number;
subTopicId: number;
topicName: string;
subTopicName; string;
}
alert(a.Topics[1].topicName+“-”+a.Topics[1].subTopicName)代码>如果JSON包含“stringId”(例如“1”、“2”)作为标识符,我们可以将该对象定义为字典(请参见):
接口数据
{
topicId:编号;
副标题:编号;
主题名称:字符串;
子主题名称;字符串;
}
//具有字符串类型键的IDictionary
//和IData类型的值
接口IDataSet
{
[键:字符串]:IData;
}
变量源=
“{”1:{“主题ID”:1,“子主题ID”:1,“主题名称”:“x”,“子主题名称”:“x”},”+
““2”:{“主题ID”:1,“副主题ID”:2,“主题名称”:“x”,“副主题名称”:“x”},”+
““62”:{“主题ID”:10,“副主题ID”:62,“主题名称”:“x”,“副主题名称”:“x”}”+
'}';
var a=JSON.parse(源代码);
for(a中的var键)
{
var elm=document.createElement('div');
elm.innerText=“key:+key+”,topicId:+a[key].topicId
文件.正文.附件(elm);
}
选中此选项(单击run,查看结果),它可以有任意数量的IData对象:听起来您想要一个。