对象上的 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);

我有点卡住了。任何帮助或重定向将不胜感激!


尚方宝剑之说
浏览 113回答 3
3回答

慕桂英3389331

您的所有对象(至少在您编写的那两个对象中)的键中都有一个额外的不可见空白字符。我开始在控制台中复制粘贴您的'User ID'字符串,发现在您的数据中两个User ID键都有这个问题。当粘贴到浏览器的控制台时,这些不可见的字符会呈现为红点。我还检查了你数据中的另外两个键,它们似乎很清楚;.trim()但是,当您从 csv 文件形成数据时,最好在对象键上执行操作。仅供参考,破坏代码的字符是\ufeff“零宽度无中断空格”。

慕沐林林

U前面有特殊字符'User Id'。请尝试运行这个答案。你会看到它有效。let users = [&nbsp; {&nbsp; &nbsp; 'User ID': '5ef62675b78d747c79086175',&nbsp; &nbsp; 'Survey Completed Date': '11/12/19',&nbsp; &nbsp; 'Survey Type': 'Assessment'&nbsp; },&nbsp; {&nbsp; &nbsp; 'User ID': '5ef62675b78d827c79086186',&nbsp; &nbsp; 'Survey Completed Date': '27/12/19',&nbsp; &nbsp; 'Survey Type': 'Assessment'&nbsp; }];for (let i = 0; i < users.length; i++) {&nbsp; const row = users[i];&nbsp; let userId = row['User ID'];&nbsp; console.log(userId);}

守着星空守着你

当我复制你的代码之前,"User ID"有一个带有问号的字符,当删除它时,它就row["User ID"]工作得很好。所以请尝试一下!在这个codesandbox中,正如你在这里看到的那样,它工作得很好
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript