为大于零的项目创建对象数组



我需要为大于零的项目创建一个对象数组。我有以下代码:

const payments = [];
if (values.ops > 0) {
payments.push({
"tax": options.find(item => item.value === "ops"),
"type": ops.find(item => item.value === "tax"),
"year": values.year,
"period": ops.find(item => item.type === "period"),
"sum": values.ops
})
};
if (values.ops1 > 0) {
payments.push({
"tax": options.find(item => item.value === "ops1"),
"type": ops1.find(item => item.value === "tax"),
"year": values.year,
"period": ops1.find(item => item.type === "period"),
"sum": values.ops1
})
};
if (values.oms > 0) {
payments.push({
"tax": options.find(item => item.value === "oms"),
"type": oms.find(item => item.value === "tax"),
"year": values.year,
"period": oms.find(item => item.type === "period"),
"sum": values.oms
})
};

有没有办法简化这一点,以便我可以检查一个项目是否大于 0 并且只payments.push一次?

您可以使用速记属性名称创建mapper对象。这会将"ops"键映射到ops数组作为值,依此类推。然后遍历此对象的entries,并根据values[key]推送到payments数组

const mapper = {
ops,
ops1,
oms
}
const payments = []
for (const [key, array] of Object.entries(mapper)) {
if (values[key] > 0)
payments.push({
"tax": options.find(item => item.value === key),
"type": array.find(item => item.value === "tax"),
"year": values.year,
"period": array.find(item => item.type === "period"),
"sum": values[key]
})
}
const payments = [];
[
"ops", 
"ops1", 
"oms"
].forEach(prop=>{
if(values[props]>0){
payments;.push({
tax: options.find(item => item.value === prop),
type: ops.find(item => item.value === "tax"),
year: values.year,
period: ops.find(item => item.type === "period"),
sum: values[prop]
})
}
})

你可以获取一个对象进行opsops1oms,并迭代键并在必要时删除新对象。

data = { ops, ops1, oms }
Object.keys(data).forEach(k => {
if (values[k] <= 0) return;
payments.push({
tax: options.find(item => item.value === k),
type: data[k].find(item => item.value === "tax"),
year: values.year,
period: data[k].find(item => item.type === "period"),
sum: values[k]
});
});

最新更新