为了账号安全,请及时绑定邮箱和手机立即绑定

对象上的 JavaScript 方括号表示法在现有键上返回未定义

对象上的 JavaScript 方括号表示法在现有键上返回未定义

尚方宝剑之说 2023-09-28 17:22:22
摘要:无法使用括号表示法访问对象键值,因为现有键作为未定义返回。我有一组用户(通过解析 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);我有点卡住了。任何帮助或重定向将不胜感激!
查看完整描述

3 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

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

https://img1.sycdn.imooc.com//65154607000179fc06480061.jpg

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

仅供参考,破坏代码的字符是\ufeff“零宽度无中断空格”。


查看完整回答
反对 回复 2023-09-28
?
慕沐林林

TA贡献2016条经验 获得超9个赞

U前面有特殊字符'User Id'。请尝试运行这个答案。你会看到它有效。


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'

  }

];


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

  const row = users[i];

  let userId = row['User ID'];

  console.log(userId);

}


查看完整回答
反对 回复 2023-09-28
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

当我复制你的代码之前,"User ID"有一个带有问号的字符,当删除它时,它就row["User ID"]工作得很好。所以请尝试一下!

在这个codesandbox中,正如你在这里看到的那样,它工作得很好


查看完整回答
反对 回复 2023-09-28
  • 3 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信