[英]Structuring a multi-dimensional object with varying data
我有创建三个对象的三个函数, firstPayment
, interimPayment
和finalPayment
firstPayment
将始终具有数据。 但是, interimPayment
应该总是使用finalPayment
,与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);
}
}
这是我有点卡住的地方。 我需要finalPayment
顺序添加三个对象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) : []
);
这将生成一个包含所需付款日期的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.