微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 NodeJS 中创建一个字段对的对象键说它是未定义的

如何解决在 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 举报,一经查实,本站将立刻删除。