首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有速记JavaScript让这个减速机更容易吗?

有速记JavaScript让这个减速机更容易吗?
EN

Stack Overflow用户
提问于 2019-07-04 18:48:52
回答 3查看 53关注 0票数 0

我需要“精简”并将对象列表为更少的属性,但仍然有很多。我的代码如下所示:

代码语言:javascript
复制
function reduceSpeakersData(speakers: Speaker[]) {
    return speakers.map(function(speaker: Speaker) {
        //return speaker;
        return ({
            id: speaker.id,
            firstName: speaker.firstName,
            lastName: speaker.lastName,
            imageUrl: speaker.imageUrl,
            company: speaker.company
        })
    });
}

我知道如果我有:

代码语言:javascript
复制
firstName: firstName

我可以让它

代码语言:javascript
复制
firstName

但我不确定我能做什么

代码语言:javascript
复制
firstName: speaker.firstName

有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-04 18:57:50

如果你只想做浅薄的克隆,那么.

代码语言:javascript
复制
   speakers.map(speaker => ({ ...speaker }))

如果需要排除某些属性,则可以重构:

代码语言:javascript
复制
   speakers.map(({ to, exclude, ...speaker }) => speaker)

但是,如果您需要排除尽可能多的值,那么就没有简单的方法了。你可以使用一个帮手,例如:

代码语言:javascript
复制
    const pick = (head, ....tail) => obj => !head ? {} : Object.assign(pick(...tail), { [head]: obj[head] });

   speakers.map( pick("id", "firstName", /*...*/) )
票数 1
EN

Stack Overflow用户

发布于 2019-07-04 18:55:18

可能是因为添加了一些破坏性的对象概念

代码语言:javascript
复制
const reduceSpeakersData = (speakers: Speaker[]) => {
      return speakers.map(({ id, firstName, lastName, imageUrl, company }: Speaker) => ({
        id,
        firstName,
        lastName,
        imageUrl,
        company
      }));
    };
票数 1
EN

Stack Overflow用户

发布于 2019-07-04 18:55:46

可以使用参数列表中的析构和箭头函数:

代码语言:javascript
复制
function reduceSpeakersData(speakers: Speaker[]) {
    return speakers.map(({id, firstName, lastName, imageUrl, company}: Speaker) =>
        ({id, firstName, lastName, imageUrl, company})
    );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56893061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档