2

I have an array of the following type.

interface IArray {
   id: "message1" | "message2" | "message3";
   message: string;
}

const myArray: IArray[] = [
   {
      id: "message1",
      message: "Here is your message 1"
   },
   {
      id: "message2",
      message: "Here is your message 2"
   }
]

I would like to convert it to an indexed object with types as following.

const myObject = {
   message1: "Here is your message 1",
   message2: "Here is your message 2"
}

I could write a function that converts the array into an object.

const myObject: any = {};
myArray.forEach((arrElement) => {
   myObject[arrElement.id] = arrElement.message;
});

But the myObject is of type any. while I want the myObject to have type with indexed keys depending on array id type.

3
  • 2
    what is indexed object Commented May 3, 2020 at 14:55
  • What you mean by "But the objects keys do not get indexed with"? Commented May 3, 2020 at 14:56
  • An indexed object - in typescript defined object types have indexes. Commented May 3, 2020 at 15:26

2 Answers 2

2

const myArray = [{key: "message1",message: "Here is your message 1"},{key: "message2",message: "Here is your message 2"}]
const result = myArray.reduce((a,b)=>{
  a[b.key]=b.message;
  return a
}, {});
console.log(result);

Sign up to request clarification or add additional context in comments.

1 Comment

Please I need a typescript solution. This is not typescript. Note: I need definitions
1

You could use the forEach method:

JavaScript:

let myArray = [{
    id: "message1",
    message: "Here is your message 1"
  },
  {
    id: "message2",
    message: "Here is your message 2"
  }
];
let myObject = {};
myArray.forEach(item => {
  myObject[item.id] = item.message;
});
console.log(myObject);

TypeScript:

interface IArray {
  id: "message1" | "message2" | "message3";
  message: string;
}
const myArray: IArray[] = [{
    id: "message1",
    message: "Here is your message 1"
  },
  {
    id: "message2",
    message: "Here is your message 2"
  }
];
let myObject: any = {};
myArray.forEach(item => {
  myObject[item.id] = item.message;
});
console.log(myObject);

3 Comments

Please I need a typescript solution. This is not typescript. Note: I need definitions
@TanmoyBasak I have updated my answer with a TypeScript syntax.
Thank you for the code. However, the resulting myObject has a type of any. While I am looking for a type: interface IObject { message1: string; message2: string; }

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.