Javascript 为什么这些循环不同?

Javascript 为什么这些循环不同?,javascript,Javascript,我在工作时在我的网站上工作,当我遇到一些奇怪的事情时,我通过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] : "";

我在工作时在我的网站上工作,当我遇到一些奇怪的事情时,我通过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(数据中的变量id){
用于(var键入数据[id]){
var temp=document.getElementsByName(key+id);

for(var i=0;i
document.getElementsByName(key+id)
返回一个数组。for(var x in y)
的语法迭代对象/数组中的名称。对象中的名称是键,数组中的名称是索引


因此,在上一个循环中,
e
将是0,1,2,3,长度,…。

在第一个示例中,您犯了两个错误

  • 不要在中为数组运行。因为您将迭代的不是索引,而是属性
  • 在您的例子中,
    e
    不是元素,而是索引。这不是它不起作用的原因

  • 在第一次尝试中,
    var e
    文档的索引。getElementsByName(key+id)

    试一试


    出现错误消息了吗?我需要数据数组中的“键”,以便在从2D php数组中获取元素名称后能够重新构造元素名称。而
    for…in
    是我唯一能找到的them@Yemto:我看到你把PHP和JavaScript术语混淆了。PHP中的关联数组在JavaScript中称为对象(
    {}
    )。在JavaScript中引用数组时,通常指的是索引数组(
    ['a','b','c']
    )。对于
    数组
    (在您的例子中,它类似于
    数组
    ),请使用
    for(…){
    。对于真正的数组,你可以使用
    forEach
    @Qantas94Heavy我知道,我自学了这两种语言,而且不知道所有的术语。我所知道的是,我传递了一个2D数组,其中使用json和ajax称为javascript的键。最好使用
    elem.innerHTML=data[id][key]| |“”;
    为(元素中的var e).console.log您的
    e
    ,您也会找到属性。我知道,但他想使用for(数组中的var x)方法
    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] : "";
            }