Javascript 用变化的数据构造多维对象

Javascript 用变化的数据构造多维对象,javascript,object,Javascript,Object,我有三个函数可以创建三个对象,firstPayment,interimPayment和finalPayment firstPayment将始终包含数据。但是不应该总是使用interimPayment,相同的finalPayment 不需要interimPayment或finalPayment的符号基于另一个变量numberOfPayments 如果numberOfPayments===1,则只有firstPayment将有数据。如果numberOfPayments===2则需要firstPaym

我有三个函数可以创建三个对象,
firstPayment
interimPayment
finalPayment

firstPayment
将始终包含数据。但是不应该总是使用
interimPayment
,相同的
finalPayment

不需要
interimPayment
finalPayment
的符号基于另一个变量
numberOfPayments

如果
numberOfPayments===1
,则只有
firstPayment
将有数据。如果
numberOfPayments===2
则需要
firstPayment
finalPayment
。最后,如果
numberOfPayments>2
,则需要所有三个支付对象

我正在尝试解决如何根据
numberOfPayments
变量将所有这些对象添加到另一个对象
paymentSchedule

这是我的代码开始,但我有点迷路了

  getPaymentSchedule(id) {
    const firstPayment = this.getFirstPayment(id);
    const numberOfPayments = this.getNumberOfPayments(id);

    if (numberOfPayments === 2) {
      const finalPayment = this.getFinalPayment(id);
    } else if (numberOfPayments > 2) {
      const interimPayments = this.getInterimPayments(id);
    }
  }
这就是我被卡住的地方。我需要按此顺序添加三个对象
firstPayment
getInterimPayments
finalPayment
,但显然只有在设置了这三个对象之后才需要添加。我觉得我可以用比很多很多if语句更快的方法来实现这一点

我试图实现的
paymentSchedule
示例:

{
    firstPayment: {
        label: "foo",
        amount: 123
    },
    interimPayment: {
        label: "foo",
        amount: 123
    },
    finalPayment: {
        label: "foo",
        amount: 123
    },
}

or

{
    firstPayment: {
        label: "foo",
        amount: 123
    },
    finalPayment: {
        label: "foo",
        amount: 123
    },
}

也许我错过了什么,但这就是你要找的吗

getPaymentSchedule(id) {
    const numberOfPayments = this.getNumberOfPayments(id);
    const schedule = {};
    schedule.firstPayment = this.getFirstPayment(id);

    if (numberOfPayments === 2) {
        schedule.finalPayment = this.getFinalPayment(id);
    } else if (numberOfPayments > 2) {
        schedule.interimPayments = this.getInterimPayments(id);
    }
    return schedule;
}

可以将数组与对象一起使用。数组反映了顺序和对象

[
    {                              // exists always
        name: 'firstPayment',
        label: 'foo',
        amount: 123            
    },
    {                              // numberOfPayments > 2
        name: 'interimPayment',
        label: 'foo',
        amount: 123            
    },
    {                              // numberOfPayments > 1
        name: 'finalPayment',
        label: 'foo',
        amount: 123            
    }
]
要生成,您可以使用如下内容

var schedule = [].concat(
        this.getFirstPayment(id)
        numberOfPayments > 2 ? this.getInterimPayments(id) : [],
        numberOfPayments > 1 ? this.getFinalPayment(id) : []
    );

这将生成一个包含所需付款日期的数组。

请同时添加对象。@NinaScholz您指的是哪个对象?这是关于设计的。如果不知道如何使用付款和时间表,很难说设计应该如何。你能解释一下你想做什么吗?我假设您正在使用ES6类?@Halcyon paymentSchedule尚未创建。我试图在这个函数中创建它。提到的三个对象就是
{“label”:“foo”,“amount”:123}
我理解,但是时间表应该是什么样子取决于您如何使用它。你不能只返回一个带有3个付款键的对象,因为根据付款数量,它们是可选的。是的,但我刚刚意识到我需要交换订单,因为我需要在最终付款之前进行中间付款,所以,也许这应该是一个对象数组?你不能对对象进行排序,所以如果顺序很重要,那么你需要其他东西。我觉得我错过了在这里设计的机会。为什么顺序很重要?我需要遍历并输出数据。但必须是首次付款>期中付款>最终付款。所以它一定是有序的,我想我不能帮你渡过难关。附近有人能帮你吗?