首页 > 解决方案 > 对象上的 JavaScript 括号表示法在现有键上返回未定义

问题描述

摘要:无法使用括号表示法访问对象键值,因为现有键返回为未定义。

我有一组用户(通过解析 CSV 文件及其列构建):

let users = [
  {
    'User ID': '5ef62675b78d747c79086175',
    'Survey Completed Date': '11/12/19',
    'Survey Type': 'Assessment'
  },
  {
    'User ID': '5ef62675b78d827c79086186',
    'Survey Completed Date': '27/12/19',
    'Survey Type': 'Assessment'
  },
  ...
];

对于每个用户,我都需要访问他们的用户 ID 才能进行猫鼬查询。

  console.log(users) // Logs the above object

  for (let i = 0; i < users.length; i++) {

    const row = users[i];

    // Example with i = 0
    console.log(row) // {
                     //   'User ID': '5ef62675b78d747c79086175',
                     //   'Survey Completed Date': '11/12/19'',
                     //   'Survey Type': 'Assessment'
                     // }
    console.log('User ID' in row)                         // false (??) <<<<<<<<<
    console.log(row['User ID'])                           // undefined (!?!)  <<<<<<<<<
    console.log(row['Survey Completed Date'])             // 11/12/19 (This works however)
    console.log(Object.keys(row)[0])                      // User ID 
    console.log(Object.keys(row)[0].trim() === 'User ID') // true 
    console.log(row[Object.keys(row)[0]])                 // 5ef62675b78d747c79086175 (want to 
                                                          //  avoid using this workaround since 
                                                          //  the properties will not always be 
                                                          //  in the same order)
    
    let userId = row['User ID']                           // (Still undefined)
    let user = await User.findById(userId);

我比较卡。任何帮助或重定向将不胜感激!

标签: javascriptobjectpropertieskeybrackets

解决方案


您在所有对象的键中都有一个额外的不可见空格字符(至少在您编写的那些 2 中)。我开始'User ID'在控制台中复制粘贴你的字符串,发现在你的数据中,两个User ID键都有这个问题。

粘贴到浏览器控制台

这些不可见的字符在粘贴到我的浏览器控制台时会呈现为红点。我还检查了您数据中的其他 2 个键,它们似乎很清楚;但是,.trim()当您从 csv 文件形成数据时,最好使用对象键。

仅供参考,破坏代码的字符是\ufeff零宽度不间断空格”


推荐阅读