当我包含一个名为tipAverage的函数时,Mark对象中数组“ tips”的值是错误的。但是,删除函数tipAverage时,值是正确的。
我正在尝试了解代码所发生的事情(即控制流)。有人可以告诉我为什么函数tipAverage破坏了Mark对象中“提示”中的值吗?谢谢。
var tipJon = {
fullName: "John Smith",
billValues: [124, 48, 268, 180, 42],
calcTipJon: function (){
this.tips = [];
this.totalBill = [];
for (var i = 0; i < this.billValues.length; i++){
var percentage;
var bill = this.billValues[i]
if (bill < 50){
percentage = 0.2;
} else if (bill >= 50 && bill<= 200){
percentage = 0.15;
} else if (bill> 200){
percentage = 0.10;
}
this.tips[i] = this.billValues[i] * percentage;
this.totalBill[i] = (this.billValues[i] * percentage) + this.billValues[i];
}
}
}
var tipMark = {
fullName: "Mark Miller",
billValues: [77, 375, 110, 145],
calcTipMark: function (){
this.tips = [];
this.totalBill = [];
for (var i = 0; i < this.billValues.length; i++){
var percentage;
var bill = this.billValues[i];
if (bill < 100){
percentage = 0.2;
} else if (bill >= 100 && bill<= 300){
percentage = 0.1;
} else if (bill > 300){
percentage = 0.25;
}
this.tips[i] = bill * percentage;
this.totalBill[i] = bill + bill * percentage;
}
}
}
tipMark.calcTipMark();
console.log(tipMark);
tipJon.calcTipJon();
console.log(tipJon);
function tipAverage (arrayName){
for (var i = 0; i < arrayName.length - 1; i++){
//arrayName[i] = arrayName[i] + arrayName[i];
arrayName[i] += arrayName[i + 1];
}
return arrayName[i] / arrayName.length;
}
console.log("TIP AVERAGE " + tipAverage(tipMark.tips));
答案 0 :(得分:2)
将数组本身(通过引用?)传递给tipAverage函数。因此,当您修改函式阵列参数(例如arrayName[i] += arrayName[i + 1]
)中的项目时,阵列本身就会变更。这些变化将在tipAverage函数之外看到。
您最好的选择是使用多种方法之一传递数组的副本:
console.log("TIP AVERAGE " + tipAverage(tipMark.tips.slice()));
希望这会有所帮助。
答案 1 :(得分:0)
您的代码计算平均值的方式是错误的。它几乎更改每个值,但无法计算总和。
您可以像这样正确计算平均值:
builder.Entity<UserNotifications>(entity =>
{
entity.HasKey(n => n.Id);
entity.HasOne(u => u.User)
.WithOne(u => u.UserNotifications)
.HasForeignKey<User>(u => u.Id);
entity.HasOne(u => u.Sender)
.WithOne(u => u.UserNotifications)
.HasForeignKey<User>(u => u.Id);
});
或者,功能更多:
console