代码之家  ›  专栏  ›  技术社区  ›  developer

Javascript说一个键不存在于一个对象中,即使它存在

  •  0
  • developer  · 技术社区  · 2 年前

    我正在创建一个管理面板。 出于某种原因,我的代码返回一个错误,说被禁止的用户不存在,即使它在对象中。这让我很困惑,我不知道如何解决它。我最初得到的错误是 TypeError: Cannot read properties of undefined (reading 'forEach') ,并且当我记录密钥banned_users时,它返回undefined。我甚至试着在它之后将数据记录在控制台中,但其中仍然有密钥banned_users。

    以下是我处理响应的代码:

    fetch('/admin_info')
        .then(response => response.json())
        .then(data => {
          console.log(data)
          data.admins.forEach((admin) => {
            var list_admin = document.createElement('li');
            if (admin != data.owner && admin != data.admin_username) {
              list_admin.className = 'list_admin';
              list_admin.onclick = function (){
                remove_admin(admin)
              }
            }
            list_admin.id = `admin_${admin}`;
            if (admin == data.owner){
              list_admin.innerText = `${admin} (Owner)`
            }else{
              list_admin.innerText = admin
            }
            admin_list.appendChild(list_admin);
          });
        })
          //Problem Code
          banned_users = data.banned_users
          console.log(data.banned_users)
          banned_users.forEach((user) => {
          var banned_user = document.createElement('li');
          banned_user.className = 'banned_user';
          banned_user.innerText = user
          banned_user.appendChild(banned_list)
        //
        })
        .catch(error => {
          error_display.style.display = 'block';
          error_text.innerText = `Admin Panel failed to load: ${error}`;
        });
    }
    

    这是它作为响应接收的JSON:

    "admin_username":"Username",
    "admins":["Username1","Username2"],
    "banned_users":{"test":{}},"owner":"Username"}
    

    有人能解决这个问题吗? 编辑:我说data.banned_users或data[“banned_users”]也有问题,因为它没有从JSON中获取密钥,并且由于某种原因返回undefined

    2 回复  |  直到 2 年前
        1
  •  0
  •   SoZettaSho    2 年前

    你的 banned_users 是一个对象。对象没有 forEach 方法,只有数组可以。而不是 对于每个 ,使用 for ... in

      for (let user in banned_users) {
        var banned_user = document.createElement('li');
          banned_user.className = 'banned_user';
          banned_user.innerText = user
          banned_user.appendChild(banned_list)
    }
    

    这个代码有效吗?我不明白 banned_list 指其他任何地方。但是这个结构。。。

        2
  •  0
  •   HAHALOSAH    2 年前

    在您的回复中, banned_users 是一个对象。对象没有 forEach 方法相反,您可以尝试以下操作:

    for (var user in banned_users) {
        var banned_user = document.createElement('li');
        banned_user.className = 'banned_user';
        banned_user.innerText = user
        banned_user.appendChild(banned_list)
    }