从数组javascript获取键值

时间:2017-08-15 07:44:58

标签: javascript arrays dynamic key

我遇到了从javascript数组中获取值的问题。

struct MyNewStruct {
 Q_GADGET
    float m_range;
    Q_PROPERTY(float range MEMBER m_range)

    //Overload operator !=
    bool operator!=(const MyNewStruct & val)
    {
         //Do check with local members and return true/false
    }
};

Console.log结果:

颜色[颜色]:未定义

JSON.stringify(color): []

颜色:

var color = new Array();
for (var i = 0; i < datafeatures.length - 1; i++) {
    color[datafeatures[i].properties.userid] = datafeatures[i].properties.linecolor;
}

snapshot.forEach(function (childSnapshot) {
     var colour = childSnapshot.wp_user;
     console.log(color[colour]);
     console.log(JSON.stringify(color));
     console.log(color);
     console.log(colour);
}

颜色: 61

颜色[颜色]的预期输出:&#34;#d770ce&#34;

颜色[颜色]的实际输出:未定义。

颜色中有颜色,颜色是数字(键),但似乎无法从颜色中获取值。

2 个答案:

答案 0 :(得分:3)

您可能想尝试更改行

var color = new Array();

var color = {};

您可能正在寻找的不是数组,而是javascript中的术语,object

修改

查看源代码并进行一些调试后,问题似乎是异步执行。您之后正在填充color变量,这解释了为什么JSON.stringify在打印时生成空对象,console.log维护对变量的引用。

您需要确保首先填充color变量。

关于我如何调试它的一些步骤,(使用chrome):

  • 打开Chrome开发工具(Ctrl + Shift + I)
  • 转到控制台
  • 点击打印undefined
  • 的行号
  • 您应该被发送到sources标签,您将看到您的源代码
  • 此处通过单击行号(在本例中为407)
  • 添加断点
  • 在开发工具窗口中刷新,(Ctrl + R)
  • javascript执行应该在调试器停止
  • 在此状态下,将鼠标悬停在源代码上的变量上以查看其在该时间点的值
  • 你会发现color确实是一个空对象
  • 追溯到color的填充方式
  • 在此代码d3.json(
  • 下嵌套查找
  • 当你知道你遇到了异步问题时

答案 1 :(得分:0)

这里的代码

for (var i = 0; i < datafeatures.length - 1; i++) {
    color[datafeatures[i].properties.userid] = datafeatures[i].properties.linecolor;
}

看起来应该更像这样

for (var i = 0; i < datafeatures.length - 1; i++) {
    color.push({[datafeatures[i].properties.userid]: datafeatures[i].properties.linecolor})
}

我想,它会为你提供你正在寻找的阵列。