为什么这些循环不同
Why are these loops different?
我正在我的网站上工作,当我遇到一些奇怪的事情时,我正在通过ajax从数据库中获取数据,然后我使用一些循环来更新表中的数据。这是我第一次尝试循环
for(var id in data){
for(var key in data[id])
for(var e in document.getElementsByName(key+id))
e.innerHTML = data[id][key] !== null ? data[id][key] : "";
我本以为这会毫无问题地奏效,但事实并非如此。表中没有任何字段被更新,我也不知道为什么。然后我决定用一些更传统的东西来测试,最终得到了这个。
for(var id in data){
for(var key in data[id]){
var temp = document.getElementsByName(key+id);
for(var i=0; i<temp.length; i++)
temp[i].innerHTML = data[id][key] !== null ? data[id][key] : "";
}
这非常有效,但我不明白为什么,因为从我所看到的来看,循环应该做同样的事情。所以我想知道,为什么它们不同,我该如何修复它。我喜欢代码中的一致性,不想使用for(var i=0; i<temp.length; i++)
,因为我以前使用过其他类型的循环。
document.getElementsByName(key+id)
返回一个数组。语法for(var x in y)
迭代对象/数组中的名称。对象中的名称是键,数组中的名称则是索引。
因此,上一个循环中的e
将为0,1,2,3,长度。。。。
第一次尝试时,var e
是document.getElementsByName(key+id)
的索引
尝试
for(var id in data){
for(var key in data[id]){
var elements = document.getElementsByName(key+id);
for(var e in elements)
var elem = elements[e];
elem.innerHTML = data[id][key] !== null ? data[id][key] : "";
}
在第一个例子中,您犯了两个错误。
- 不要为
arrays
运行for .. in
。因为您不会对索引进行迭代,还会对属性进行迭代 - 在您的情况下,
e
不是元素,而是索引。为什么它不起作用
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 为什么JavaScript在for循环为3时向所有4发出警报
- 为什么要返回'这'在导致循环的JavaScript原型中
- 为什么我的While循环不起作用
- 为什么AngularJS在每个摘要循环上都执行函数
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- 为什么这个For循环会使浏览器实验室崩溃
- 为什么我使用javascript获得了一个无限的for循环
- 为什么我在下面的..of循环中得到意外令牌
- 为什么这个while循环不能使用AND逻辑运算符
- 为什么ng中的自定义指令在循环完成后重复运行
- 为什么这会造成一个无休止的循环并使我的浏览器崩溃
- 为什么不'当循环停止时
- JavaScript:为什么这个循环的优化使它变慢了
- 在 for 循环中,为什么 i++ 在第二次使用后变为 1
- 带有foo.js和foo.js.coffee(空)的Rails资产管道导致js循环.为什么?
- Javascript函数保持指数级循环.为什么
- for循环为什么以及何时忽略具有html集合的某些项
- jQuery函数循环:为什么夏奇拉在陌生人吻她时重复吻
- 美元.进入循环:为什么函数在递增之后执行