Is there a simple way to convert an Index Signature (dictionary) to a Map efficiently?

Currently, the only method I am aware of to convert Dictionary<K,V> (such as from Json.NET) to Map<K,V> in TypeScript involves the following steps:

const json = '{ "1": "one", "2": "two", "3": "three", "4": "four" }';
const dictionary = JSON.parse(json) as { [index: number]: string; };
const parsedMap = new Map<number, string>();
for (const i in dictionary) {
    if (!dictionary.hasOwnProperty(i)) { continue; }
    console.log(`dictionary[${i}]: ${dictionary[i]}`);
    parsedMap.set(parseInt(i, 10), dictionary[i]);
}
console.log(`parsedMap.size: ${parsedMap.size}`);
console.log(`parsedMap.get(4): ${parsedMap.get(4)}`);

Are there any built-in methods or libraries that simplify this conversion process? Is the current approach too verbose?

Answer №1

In the event that your coding environment supports Object.entries():

const parsedMap = new Map(Object.entries(JSON.parse(json)))

Please be aware that this method will result in keys being treated as strings rather than numbers.

If you find yourself needing numeric keys, (or if you do not have access to Object.entries()), a slightly longer alternative is available:

const dictionary = JSON.parse(json);
const parsedMap = new Map(Object.keys(dictionary).map(
     k => [parseInt(k, 10), dictionary[k]] as [number, string]
));

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Using Typescript to read data from a file and returning an object that is undefined

I'm attempting to extract data from a file that contains the following snippet: const config = { appName: 'my app', }; If I log the variable containing this data, it shows up as expected: const config = { appName: 'my app', ...

A Promise is automatically returned by async functions

async saveUserToDatabase(userData: IUser): Promise<User | null> { const { username, role, password, email } = userData; const newUser = new User(); newUser.username = username; newUser.role = role; newUser.pass ...

Steps for determining if a string is compatible with a user-defined type in Typescript

Just getting started with Typescript and currently working on a sudoku game. Here are the types and interface I have set up: export type GridCellValue = 1|2|3|4|5|6|7|8|9; export interface GridCell { readonly: boolean, value: GridCellValue|null, } ex ...

Tips for obtaining type narrowing for a function within a mixed array

In my coding adventure, I have crafted a brilliant match function. This function is designed to take a value along with an array of [case, func] pairs. The value is then compared to each case, and if a match is found, the associated func is executed with t ...

Tips for managing Typescript Generics while utilizing the styled function provided by the '@mui/material/styles' package

import Table,{TableProps} from 'my/table/path' const StyledTable = styled(Table)({ ...my styles }) const CustomTable = <T, H>(props: TableProps<T, H>) => { return <StyledTable {...props} /> } This is the issue I encoun ...

React - Component not updating after Axios call in separate file

Recently I decided to delve into React while working on some R&D projects. One of my goals was to build an application from scratch as a way to learn and practice with the framework. As I started working on my project, I encountered a rather perplexin ...

Accessing global variables after using the setInterval function can be tricky. Sometimes, despite setting the variable, it may still return undefined or

I have a typescript class where I am encountering some issues with accessing the starttime and count in the setInterval function. Even though I have set their values before, I am seeing undefined and NaN results. How can I resolve this problem? startTim ...

Encountering an AOT error while running ng build using Angular CLI

After successfully creating an application using Angular CLI with JIT compilation, I decided to optimize its performance by converting it to AOT compilation. Following the instructions provided on angular.io, I made the necessary changes to convert all fi ...

Is there a way to transfer a generic TS argument definition without encountering the "Property doesn't exist on type 'unknown'" error message?

I am puzzled by the fact that doSomething1() and doSomething2() are not being treated equally. class Example< TypeA = void, TypeB = void, ArgsType = { valueA?:TypeA, valueB?:TypeB } > { valueA?:TypeA; valueB?:TypeB; const ...

Object.assign versus the assignment operator (i.e. =) when working with React components

Just a quick question: I've come across some answers like this one discussing the variances between Object.assign and the assignment operator (i.e. =) and grasp all the points made such as object copying versus address assignment. I'm trying to ...

TypeError in TypeScript: Unable to find property 'key' in type 'HTMLAttributes<HTMLLIElement>'

While attempting to destructure the key property from an object, TypeScript is raising an error stating that Property 'key' does not exist on type 'HTMLAttributes<HTMLLIElement> However, upon logging the props object using console.log ...

What is the best way to insert an image within a mat-select-trigger?

How can I dynamically insert two svg flag images into a mat-select-trigger based on the user's language selection? Here is my code for reference: https://i.sstatic.net/SJ8lu.png https://i.sstatic.net/MG2zP.png HTML <div class="select-contain ...

Gatsby Image Sharp Troubleshooting: Resolving Errors

My Gatsby v5 project, built using typescript, is encountering issues during compilation after running the initial gatsby new command. The compilation fails and I am presented with the following errors: load plugins dyld: lazy symbol binding failed: Symbol ...

Functional programming: Retrieve the initial truthy output from executing an array of diverse functions using a particular parameter

As I delve into the world of functional programming in TypeScript, I find myself contemplating the most idiomatic way to achieve a specific task using libraries like ramda, remeda, or lodash-fp. My goal is to apply a series of functions to a particular dat ...

Having trouble retrieving a value from the img.onload event handler. A 'boolean' type error is being thrown, indicating it cannot be assigned to type '(this: GlobalEventHandlers, ev: Event) => any'

In my Angular application, I have implemented a method that verifies the size and dimensions of an image file and returns either false or true based on the validation result. Below is the code snippet for this function: checkFileValidity(file: any, multipl ...

Question from Student: Can a single function be created to manage all text fields, regardless of the number of fields present?

In my SPFX project using React, TypeScript, and Office UI Fabric, I've noticed that I'm creating separate functions for each text field in a form. Is there a way to create a single function that can handle multiple similar fields, but still maint ...

The Yup Resolver suddenly threw an error indicating that the type was not able to be assigned

I have encountered an error while using @hookform/resolvers version 3.9.0. Here is the code snippet that caused the issue: const form = useForm<FormType>({ defaultValues: { ...defaultFormFieldValues }, resolver: yupResolver(schema), mode: ...

Steps for setting up a Node.js Express application that serves a Vue.js single page application

Currently, I am in the process of setting up a Node.js project that incorporates Express to create backend APIs and deliver a Single Page Application (SPA) designed with Vue.js. Upon initializing a project using the Vue cli, components such as the main fi ...

Is it possible to perform a comprehensive text search in Mongoose using multiple criteria and connecting them with an AND operator?

Currently, I am able to smoothly perform a full text search using just one word. However, I'm facing difficulty in searching for multiple parameters or entering them at the same time. This is how my function looks like: export const searching = ( ...

Is there a way to convert a JSON input object to a model class using TypeScript in a Node.js application?

Currently, I am developing my Node.js server using TypeScript and the express framework. Here is an example of what my controller and route looks like: export class AuthController { public async signUpNewUser(request: Request, response: Response) { ...