gpt4 book ai didi

javascript - 修改值 - 通过引用传递

转载 作者:行者123 更新时间:2023-12-02 22:55:55 26 4
gpt4 key购买 nike

修改通过引用传递的 calculateLineTotals() 中的值是一种不好的做法吗?如果是这样,我是否需要克隆一行然后返回它?

下面的示例演示:

const data = {
lines: [
{
Title: "Item One",
Size: "Large",
ProductId: "5535-43",
Price: 10,
TotalIncTax: 0,
TotalExclTax: 0,
Tax: 0,
TaxPercent: 20,
Qty: 2,
}
]
};

function calculateData(data) {
for(const line of data.lines) {
calculateLineTotals(line);
}

return data;
}

function calculateLineTotals(line) {
const qty = line.Qty
const price = line.Price;
const taxRate = line.TaxPercent;

const totalIncTax = price * qty;
const totalExclTax = totalIncTax / ((taxRate + 100) / 100);
const tax = (totalIncTax - totalExclTax);

line.TotalIncTax = totalIncTax;
line.TotalExclTax = totalExclTax;
line.Tax = tax;

return line;
}

console.log(calculateData(data));

最佳答案

Is it bad practice to modify the values in the calculateLineTotals() which is passed by reference?

不一定。这取决于您的应用程序用例。如果您不需要进一步向下的原始数据,那么对其进行变异是完全可以的。在您的示例中,写入的属性看起来为空(值为0),拥有一个填充的函数可能没问题结果。尽管如此,相应地命名和记录变异函数是一个很好的做法。您甚至可以删除return值,让调用者清楚地知道他不会获得新值。

If so, do I need to clone a line and then return it?

是的,尽管使用现代 ES6 语法,它不再是“克隆”,而更多的是创建一个全新的对象。

function calculateLineTotals(line) {
const {Qty: qty, Price: price, TaxPercent: taxRate} = line;

const totalIncTax = price * qty;
const totalExclTax = totalIncTax / ((taxRate + 100) / 100);
const tax = (totalIncTax - totalExclTax);

return {...line, TotalIncTax: totalIncTax, TotalExclTax: totalExclTax, Tax: tax};
}

function calculateData(data) {
return {lines: data.lines.map(calculateLineTotals)};
}

关于javascript - 修改值 - 通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57981967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com