javascript - 从打字稿中的键访问值
问题描述
在我的打字稿应用程序中,我有以下格式的 config.json:
EventFilters": [
{
"Name": "AppLaunch",
"Version": "2"
},
{
"Name": "messageDisplayed",
"Version": "2"
},
{
"ID": "40021",
"Version": "2"
}
]
现在,在我的 .ts 文件中,我想读取这些键值对,我正在使用以下代码:
[![let eventfilters: Object\[\] = this.getEventFilters(); // this method reads the event filters from the config, as shown in the image
let keys: Object\[\];
for (let i: number = 0; i < eventfilters.length; i++) {
keys = Object.keys(eventfilters\[i\]);
for (let j: number = 0; j < keys.length; j++) {
if(eventfilters\[i\]\[keys\[j\]\] === \[/*Parameter 2 to compare*/\]){
//do something
}
}
}]
我正在尝试使用以下'eventfilters [i] [keys [j]]'比较'if'语句中的值。但是,它抛出以下错误'类型'对象'不能用作索引类型。'。
但是,当我在浏览器控制台中使用以下语句时,它会返回键的值“eventfilters[0][0]”
由于 typescript 和 ecmascript 的版本,我不能使用以下内容:
Object.values(eventfilters[i]); 或 Object.entries(eventfilters[i]);
抱歉,问题很长,并在此先感谢。
解决方案
您的“键”变量被声明为 Object[],它不能用作数组中的索引。
在这种情况下,您应该使用字符串数组:
let keys: string[];
但是,由于您没有一个类来存储对象,所以它也不起作用。角度不能相信来自对象的所有索引都将始终是一个字符串。
因此,在这种情况下,您可以放弃索引方法并使用以下方法:
EventFilters.forEach(obj => {
Object.entries(obj).forEach(([key, value]) => {
console.log('${key} ${value}');
});
});
不使用 Object.entries 的方法
您还可以对 EventFilters 数组上的记录强制一个类型。
const EventFilters: Record<string, any> = [
{
"Name": "AppLaunch",
"Version": "2"
},
{
"Name": "messageDisplayed",
"Version": "2"
},
{
"ID": "40021",
"Version": "2"
}
];
let keys: any[];
for (let i: number = 0; i < EventFilters.length; i++) {
for (const key in EventFilters[i]) {
console.log(key);
console.log(EventFilters[i][key]);
};
}
推荐阅读
- kubernetes - 如何强制删除 kubernetes pod?
- python - 当我已经通过 pip 安装了模块时,为什么它一直说 ImportError: No module named pydot?
- java - 编译器如何执行信息隐藏和封装?
- php - 使用 MeekroDB 从 TinyMCE 插入 HTML
- laravel - Laravel - 使用不同日期格式播种模型时出错
- python - 为什么 Datatime.now() 的相邻调用在 Windows 上给出相同的结果
- jakarta-ee - 将应用程序部署到 glassfish 4.1.2 时出现 PreDestroy 异常
- regex - 从 XML 解析 IP 地址 - Ansible
- maps - 谷歌地图无法在自定义叠加层上绘制
- excel - 用于遍历 Excel/VB 中的数据的 DowithIf() 未运行