繁体   English   中英

通过数组JavaScript通过键获取价值

[英]Get value by key from array javascript

我在从javascript数组获取值时遇到问题。

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);
}

Console.log结果:

颜色[颜色]:未定义

JSON.stringify(color): []

颜色:

[]
 26: "#9d36ee"
 45: "#b1c743"
 56: "#f9c53c"
 61: "#d770ce"
 63: "#267fa1"
 64: "#85002f"
 68: "#78eca8"
 92: "#a4a2e7"
length: 93
__proto__: Array(0)

颜色: 61

color [colour]的预期输出:“#d770ce”

color [colour]的实际输出:未定义。

颜色中包含某些内容,颜色是数字(键),但是似乎无法从颜色中获取值。

您可能想尝试更改行

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(
  • 那是当您知道遇到异步问题时

此代码在这里

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})
}

我认为,它将为您提供所需的阵列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM