如何解决在 NodeJS 中创建一个字段对的对象键说它是未定义的
我是 Javascript 新手,我想知道为什么当我创建以下对象时...
this.prospectCollection = {};
我不能使用 (参考第 14 行)
miningProspect(num,address)
{
console.log(`Checking for string: ${num}`);
let odds;
if(num == 0 || num == 0.00000000001 || num == 0.00000000005 || num == 0.00000000010)
{
if(address in this.prospectCollection)
{
this.prospectCollection[address][num] += 1;
//calculate prospects here
}
else
{
this.prospectCollection[address][num] = 1;
}
}
else
{
return false;
}
return true;
}
我想给对象动态名称我使用括号表示法,但它在控制台中给了我这个错误...
this.prospectCollection[address][num] = 1;
^
TypeError: Cannot set property '0.00000000001' of undefined
任何帮助或见解将不胜感激。
编辑:
是 this.prospectCollection = {[address]:{[num]:1}};
吗?难道这不会将它分配给那个并且不能像数组那样 .push() 东西吗?
解决方法
本质上,代码的关键部分可以这样重写:
if(!(address in this.prospectCollection))
{
this.prospectCollection[address][num] = 1;
}
但这不是正确的 JS,因为您基本上是在尝试访问 undefined
的属性(即 this.prospectCollection[address]
)。 JS 中没有 autovivification。
一种可能的方法是创建一个不存在的对象(手动激活):
this.prospectCollection[address] = this.prospectCollection[address] || {};
this.prospectCollection[address][num] = (this.prospectCollection[address][num] || 0) + 1;
另一个可行的选择是使用一些提供自动激活的库函数 - 例如 lodash.set。它可以像...一样简洁...
const path = ['prospectCollection',address,num];
_.set(this,path,_.get(this,0) + 1);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。