In my typescript application, I have the config.json in the following format:
EventFilters": [ { "Name": "AppLaunch", "Version": "2" }, { "Name": "messageDisplayed", "Version": "2" }, { "ID": "40021", "Version": "2" } ]
Now, in my .ts file, I want to read these key value pairs, and I am using the following code:
[![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 } } }]
I am trying to compare the values in ‘if’ statement, using the following ‘eventfilters[i][keys[j]]’. However, its throwing the following error ‘Type ‘Object’ cannot be used as an index type.’.
However, when I use the following statement in the browser console, it returns me the value of the key, ‘eventfilters[0][0]’
And due to the version of the typescript and ecmascript, I cannot use the following:
Object.values(eventfilters[i]); OR Object.entries(eventfilters[i]);
Apologies for the long question and thanks in advance.
Advertisement
Answer
Your “keys” variable it is declared as an Object[], and it cannot be used as an index in an array.
You should use a string array in that case:
let keys: string[];
But, as you don’t have a class to store the objects, it’s wont work either. The angular can’t trust that all the index from the objects it will be always a string.
So, in this case, you can abandon the index approach and use something like:
EventFilters.forEach(obj => { Object.entries(obj).forEach(([key, value]) => { console.log('${key} ${value}'); }); });
Approach not using Object.entries
You can also force a type to the records on the EventFilters array.
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]); }; }