从对象数组中选择某些项目以在 Typescript 中创建新数组?

Posted

技术标签:

【中文标题】从对象数组中选择某些项目以在 Typescript 中创建新数组?【英文标题】:Select certain items from array of objects to create new array in Typescript? 【发布时间】:2021-02-12 11:52:02 【问题描述】:

我想从一个单独的数组对象中创建一个字符串数组。

export interface box
    image: string,
    link: string,
    button_name: string,
    info: string, 
    description: string


export const BOX: box[] = [
    image: 'image here', link: 'google.com',
    button_name: 'name', info: 'some information', description: "a description"
    ,

    image: 'image here again', link: 'another google.com',
    button_name: 'another name', info: 'some more information', description: "another description"
    ,
]

基本上我想从这些现有信息中创建一个新数组,但它只是一个信息数组。我不确定如何在打字稿中实现这一点。我试过像这样使用 ForEach 函数:

infos: string[] = BOX.forEach(element => element.info);

但这会给我一个错误提示

Type 'void' is not assignable to type 'string[]'

如何创建仅包含现有数组的信息字段的字符串数组?

【问题讨论】:

【参考方案1】:
const infos = BOX.map(element => element.info);

【讨论】:

解释和文档链接将使这成为一个更好的答案。【参考方案2】:
infos: string[] = BOX.forEach(element => element.info);

Array.prototype.forEach 从定义中返回undefined。 它只对每个数组元素执行一次提供的函数。

因此,在您的情况下,您需要使用 Array.prototype.map 函数为每个元素映射 info 参数。

const infos = BOX.map(el => el.info);

【讨论】:

【参考方案3】:

您可以在 BOX-array 上使用 map 函数。它将返回一个新数组,其中包含您放入箭头函数的内容。如果你只想要元素的信息,你可以这样做

infos: string[] = BOX.map(element => element.info);

上面有一个隐式的return语句,是下面相同函数的简写。

infos: string[] = BOX.map(element => 
   return element.info;
);

Here are some more information about the topic

【讨论】:

以上是关于从对象数组中选择某些项目以在 Typescript 中创建新数组?的主要内容,如果未能解决你的问题,请参考以下文章

告诉 TypeScript 编译器 Array.prototype.filter 从数组中删除某些类型的方法?

Typescript/nodejs:变量在某些位置隐含类型为“any”

为啥选择多个项目时,某些属性从对象检查器隐藏起来?

TypeScript - 根据属性值从数组中取出对象

使用 TypeScript 从数组中删除具有特定 id 字段值的对象的聪明方法是啥? [复制]

创建查询以在对象数组中查找对象[重复]