【发布时间】:2016-11-01 18:56:46
【问题描述】:
我的 C# 相当流利,但在我的票的 javascript 部分中,我在一个非常基本的(似乎)概念上苦苦挣扎。这段代码:
addPaymentsToBreakdown = function () {
for (var count = 0; count < checkedPayments.length; count++) {
(function (count) {
console.log(checkedPayments[0][count].value);
})(count);
}
}
是我编写的较大函数的一小部分。数组“checkedPayments”正在其他地方使用并已正确实例化。
我无法理解的概念是为什么我不能简单地在我的函数中使用 count 变量来迭代数组中的第二层“count”索引。如果我手动输入一个数字,我可以很好地查找任何索引。我也可以只使用 console.log() 数组中的每个元素,但由于某种原因,将该计数变量与嵌入式数组索引结合使用会使事情变得混乱。那个错误
我看到之后是Uncaught TypeError: Cannot read property 'value' of undefined. 请帮我解决问题,并简单解释一下为什么事情不起作用。谢谢
【问题讨论】:
-
checkedPayments[0]是和checkedPayments.length长度相同的数组吗? -
您可以使用
let代替var。但是使用var你可能会喜欢(function (i) { return console.log(checkedPayments[0][i].value); })(count)不要使用count作为内部函数参数。 -
您的代码在this fiddle 中未经修改就可以工作,尽管我觉得checkedPayments 的结构很奇怪。
-
您能解释一下为什么您在
checkedPayments.length上进行迭代,然后访问checkedPayments[0][count]而不是checkedPayments[count]? -
@ray 感谢大家的 cmets:数组看起来有点奇怪的原因是,在从包含用户可检查元素的组合框中将元素拉出页面后,数组正在被填充。当这个数组被填充时,元素就是对象。从而使该数组成为对象数组。这就是为什么存在嵌入式结构的原因。我需要访问这些对象的“值”属性,并且该数据的层次结构是数组 --> 数组 --> 值
标签: javascript arrays loops scope