javascript - 对象上的 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);
我比较卡。任何帮助或重定向将不胜感激!
解决方案
您在所有对象的键中都有一个额外的不可见空格字符(至少在您编写的那些 2 中)。我开始'User ID'
在控制台中复制粘贴你的字符串,发现在你的数据中,两个User ID
键都有这个问题。
这些不可见的字符在粘贴到我的浏览器控制台时会呈现为红点。我还检查了您数据中的其他 2 个键,它们似乎很清楚;但是,.trim()
当您从 csv 文件形成数据时,最好使用对象键。
仅供参考,破坏代码的字符是\ufeff
“零宽度不间断空格”。
推荐阅读
- mysql - 为什么 information_schema 中的 data_length 不能反映实时数据长度?
- amazon-web-services - .Net RabbitMQ 客户端是否在 .Net Core 2.0 中工作。AWS Lambda 函数?
- c++ - 如何从 nlohmann json 中的字符串中获取 JSON 对象?
- xaml - UWP NavigationView 移除转场动画
- javascript - 单击按钮时如何调用此函数?(Javascript、XSLT、XML、HTML)
- json - 仅将 JSON 数组中的日期格式化为时间
- java - Selenium WebDriver.get() 在加载的页面为空并带有警报弹出登录时卡住
- r - 为主体中 dplyr 参数的函数提供多组变量
- python - 我无法安装 Tkinter 或 tkinter。我尝试了所有代码并重新安装了 TCL/TK。但是还是报错
- jenkins - 如何在 Perforce 和 Jenkins 中使用带有自定义视图映射的流