【问题标题】:Coverting array to indexed object in typescript在打字稿中将数组转换为索引对象
【发布时间】:2020-08-17 22:43:57
【问题描述】:

我有一个以下类型的数组。

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 类型。

【问题讨论】:

  • 什么是indexed object
  • 您所说的“但对象键没有被索引”是什么意思?
  • 一个索引对象 - 在 typescript 中定义的对象类型有索引。

标签: javascript arrays json typescript types


【解决方案1】:

您可以使用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);

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

【讨论】:

  • 我需要一个打字稿解决方案。这不是打字稿。注意:我需要定义
  • @TanmoyBasak 我已经用 TypeScript 语法更新了我的答案。
  • 感谢您的代码。但是,生成的myObject 的类型为any。在寻找类型时:interface IObject { message1: string; message2: string; }
【解决方案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);

【讨论】:

  • 我需要一个打字稿解决方案。这不是打字稿。注意:我需要定义
猜你喜欢
  • 2018-09-18
  • 2021-02-24
  • 1970-01-01
  • 2020-12-15
  • 2018-11-28
  • 2018-06-07
  • 2021-07-24
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多