【发布时间】:2021-05-25 19:51:31
【问题描述】:
我正在尝试定义一个“复杂”对象:
var tM = JSON.parse('{"version":"","series":[{"name":"","possModes":[],"instance":[{"date":"","mode":""}]}]}');
数组“instance”的所有项应该是类型的对象
{"date":"","mode":""}
和所有数组“系列”的项目应该是类型的对象
{"name":"","possModes":[],"instance":[{"date":"","mode":""}]}
问题是只有索引 [0] 的项目获得了正确的属性,而更高索引的项目是“未定义的”,所以我无法将它们设置为所需的值。
我也尝试过明确定义tM,例如:
var Cinstance = new Object();
Cinstance.date = "";
Cinstance.mode = "";
var Cseries = new Object();
Cseries.name = '';
Cseries.possModes = [];
Cseries.instance = [new Object(Cinstance)];
var tM= new Object();
tM.version = "";
tM.series = [new Object(Cseries)];
也喜欢:
var tM = {series:
[{instance:
[{date:"",mode:""}
]
}
]
}
(这是针对我的具体问题而简化的版本)。
当然,它们最终都会得到相同的结果 - 仅定义了索引 [0] 的项。
【问题讨论】:
-
JavaScript 没有这样的类型概念。如果你想要这种编译时检查,你可以使用 TypeScript 和 Flow 等语言。
-
谢谢 H.M.为了迅速的反应。只是为了让自己清楚 - 我可以不用“这种编译时检查”。我需要的是一种定义对象数组的方法。当你说“这种类型的编译时检查”时 - 你的意思是“在 javascript 中没有办法定义对象数组”?
-
首先
JSON.stringify(tM.series[0])准确地返回您所要求的...'{"name":"","possModes":[],"instance":[{"date":"","mode":""}]}';其次,new Object(Cinstance)和new Object(Cseries)都不会创建新实例,而是分别返回Cinstance和Cseries的原始引用。请花一些时间用简短的句子准确地写给自己你的传入数据是什么或代表什么以及你想要创建哪种数据结构? / 验证 ?在前者之上。 -
你好彼得。感谢您的帮助。我想定义一个特定类型的对象数组。在这种特定情况下,一个对象数组 {date: "", mode: ""} 和另一个数组,其中所有项目都是“系列”类型的对象,因为我试图定义它们。
-
如果 javascript 不提供定义对象数组的语法,是否有一种解决方法可以在分配值时或分配值之前“强制”它?如果是这样,你能指导我举个例子吗?
标签: javascript arrays json object types