首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ES6对象扩展来更新数组中的对象?

如何使用ES6对象扩展来更新数组中的对象?
EN

Stack Overflow用户
提问于 2019-02-19 22:16:28
回答 1查看 644关注 0票数 1

我从一个响应中得到了下面的对象数组:

代码语言:javascript
复制
const baseInput = [{
    PaymentRequirementsDetail:
    { dateDue: '12/02/2019',
        outstandingMinimum: { Money: { amount: '5.20', code: 'GBP' } },
        overlimit: { Money: { amount: '345.20', code: 'GBP' } },
        arrears: { Money: { amount: '345.20', code: 'GBP' } } }
},
{ Account: {},
    AccountId: '00000012345',
    CardBrand: 'SOMEBRAND',
    isAccountElibible: false,
    Customer:
    { salutation: 'Mr',
        givenName: 'James',
        familyName: 'Jamesy',
        suffix: 'Dr' },
    Delinquency: { monthsInArrears: 0, isOverlimit: true } }]

然后,我使用一组函数转换响应,并返回上述函数的一个友好的格式化版本。

代码语言:javascript
复制
const baseOutput = transform(baseInput);

这将返回:

代码语言:javascript
复制
   {    name: 'Mr James Jamesy, Dr',
        cardBrand: 'SOMEBRAND',
        isAccountElibible: false,
        delinquency: { monthsInArrears: 0, isOverlimit: true },
        dateDue: '12/02/2019',
        outstandingMinimumAmount: 'GBP, 5.20',
        overlimitAmount: 'GBP, 345.20',
        arrearsAmount: 'GBP, 345.20' }

现在我想测试一下并生成一些快照。

我可以将上面的代码复制/粘贴到我的测试用例中,并在执行断言时更改值,这很好用。像这样;

代码语言:javascript
复制
    test('should omit suffix if it is undefined', () => {
    const input = [{
        PaymentRequirementsDetail:
        { dateDue: '12/02/2019',
            outstandingMinimum: { Money: { amount: '5.20', code: 'GBP' } },
            overlimit: { Money: { amount: '345.20', code: 'GBP' } },
            arrears: { Money: { amount: '345.20', code: 'GBP' } } }
    },
    { Account: {},
        AccountId: '00000012345',
        CardBrand: 'SOMEBRAND',
        isAccountElibible: true,
        Customer:
        { salutation: 'Mr',
            givenName: 'James',
            familyName: 'Jamesy' },
        Delinquency: { monthsInArrears: 0, isOverlimit: true } }];

    const output = transform(input);

    expect(baseOutput).toMatchDiffSnapshot(output);
});

这将按照我的要求生成我的快照,我将能够清楚地看到有后缀的版本和没有后缀的版本之间的差异。

然而,我相信有一种更清晰的方法可以使用对象扩展操作符来完成此操作。而不是上面所有的代码,我应该留下;

代码语言:javascript
复制
 const input = [{
        ...baseInput,
        Customer:
        { salutation: 'Mr',
        givenName: 'James',
        familyName: 'Jamesy'
        }
    }];

然而,我无法以某种方式利用扩散运算符来实现这一点。有人能看出我的错误在哪里吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-19 22:26:30

您的baseInput是一个包含两个项的数组。扩展运算符在数组或对象上工作,您在这里所做的是将数组扩展到目标对象中。

如果您的模型没有更改,您可以简单地将索引对象扩展到您的目标中,如下所示:

代码语言:javascript
复制
const input = [{
    ...baseInput[0]
  },{
        ...baseInput[1],
        Customer:
        { salutation: 'Mr',
        givenName: 'James',
        familyName: 'Jamesy'
        }
    }];

https://stackblitz.com/edit/typescript-imcqkh?file=index.ts

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54768339

复制
相关文章

相似问题

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