从打字稿中的键访问值
Access values from keys in typescript
在我的打字稿应用程序中,我有以下格式的 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' 语句中的值。但是,它抛出以下错误“Type 'Object' cannot be used as an index type.'.
但是,当我在浏览器控制台中使用以下语句时,它 returns 我的键值 'eventfilters[0][0]'
并且由于打字稿和ecmascript的版本,我无法使用以下内容:
Object.values(事件过滤器[i]);
或者
Object.entries(事件过滤器[i]);
对于这么长的问题深表歉意,并提前致谢。
您的“keys”变量声明为 Object[],不能用作数组中的索引。
在这种情况下,您应该使用字符串数组:
let keys: string[];
但是,由于您没有 class 来存储对象,因此它也不起作用。 angular 不能相信来自对象的所有索引将始终是一个字符串。
因此,在这种情况下,您可以放弃索引方法并使用类似的方法:
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]);
};
}
在我的打字稿应用程序中,我有以下格式的 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' 语句中的值。但是,它抛出以下错误“Type 'Object' cannot be used as an index type.'.
但是,当我在浏览器控制台中使用以下语句时,它 returns 我的键值 'eventfilters[0][0]'
并且由于打字稿和ecmascript的版本,我无法使用以下内容:
Object.values(事件过滤器[i]); 或者 Object.entries(事件过滤器[i]);
对于这么长的问题深表歉意,并提前致谢。
您的“keys”变量声明为 Object[],不能用作数组中的索引。
在这种情况下,您应该使用字符串数组:
let keys: string[];
但是,由于您没有 class 来存储对象,因此它也不起作用。 angular 不能相信来自对象的所有索引将始终是一个字符串。
因此,在这种情况下,您可以放弃索引方法并使用类似的方法:
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]);
};
}