今天我遇到了一个非常有趣的问题,很多人可能觉得这个问题很简单,但由于我刚刚学习使用 jQuery,所以我很想知道它是如何工作的。
我有两个数组,我正在迭代数组的元素。一个数组是 arrAllDetailsConstantData
,另一个数组是 arrAllDetails
。我想使用 arrAllDetailsConstantData 进行比较,并使用 arrAllDetails 进行更新。
我正在使用嵌套循环。但发生的情况是,在更新数组 arrAllDetails 时,数组 arrAllDetailsConstantData 也在更新。我认为这在某种程度上与父级 this 的范围有关(尽管我只是猜测)。你能帮我解决这个问题吗?
这是我的代码:
$.each(privateVariables.arrAllDetailsConstantData, function() {
if (this.AssociationId == value && this.uniqueChargeAttr == uniqueChargeAttr) {
if (this.Units == $("#txtUnits").val() &&
this.Modifier1 == $("#txtModifier1").val() &&
this.Modifier2 == $("#txtModifier2").val() &&
this.Modifier3 == $("#txtModifier3").val() &&
this.Modifier4 == $("#txtModifier4").val() &&
this.DxOption == $("#ddlDxOption").val() &&
this.DxCode1 == $("#txtDx1").val() &&
this.DxCode2 == $("#txtDx2").val() &&
this.DxCode3 == $("#txtDx3").val() &&
this.DxCode4 == $("#txtDx4").val()) {
} else {
$.each(arrAllDetails, function() {
if (this.AssociationId == value && this.uniqueChargeAttr == uniqueChargeAttr) {
this.ActionType = "M";
this.CptName = $("#lblCptDesc").text();
this.CptDesc = $("#lblCptDesc").text();
this.Units = $("#txtUnits").val();
this.Modifier1 = $("#txtModifier1").val();
this.Modifier2 = $("#txtModifier2").val();
this.Modifier3 = $("#txtModifier3").val();
this.Modifier4 = $("#txtModifier4").val();
this.DxOption = $("#ddlDxOption").val();
this.DxCode1 = $("#txtDx1").val();
this.DxCode2 = $("#txtDx2").val();
this.DxCode3 = $("#txtDx3").val();
this.DxCode4 = $("#txtDx4").val();
privateVariables.arrActionData.push(this);
}
});
}
}
});
// test code ends
最佳答案
- 首先,jQuery 的
this
引用调用元素。
在$.each
中,它指的是迭代元素。
因此,在您的第一个循环中:$.each(privateVariables.arrAllDetailsConstantData, function() {});
,this
将是当前循环元素 arrAllDetailsConstantData
数组。
在第二个循环中,this
将是 arrAllDetails
数组的当前循环元素。
- 其次,我们需要数组创建的代码。
不要忘记,在许多语言中,如果您使用此arrAllDetailsConstantData = arrAllDetails
,则对这两个对象的指针引用将指向相同的内存范围。
在本例中,请使用 Array.prototype.slice
中的 arrAllDetailsConstantData = arrAllDetails.slice();
。
关于javascript - jQuery 函数中 "this"的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31160816/