Покрытие массива индексированным объектом в машинописи - PullRequest
2 голосов
/ 03 мая 2020

У меня есть массив следующего типа.

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"
   }
]

Я хотел бы преобразовать его в индексированный объект со следующими типами.

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

Я мог бы написать функцию который преобразует массив в объект.

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

Но myObject имеет тип any. в то время как я хочу, чтобы myObject имел тип с индексированным keys в зависимости от типа массива id.

Ответы [ 2 ]

1 голос
/ 03 мая 2020

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);
1 голос
/ 03 мая 2020

Вы можете использовать метод forEach:

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);

Машинопись:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...