Javascript multidim 数组错误

标签 javascript arrays multidimensional-array

我有一个像这样的数组:

var ret = ["-37.8497", "144.968", "Albert Park Grand Prix Circuit", "2.76083", "101.738", "Sepang International Circuit","26.0325", "50.5106", "Bahrain International Circuit",...]

我希望它是这样的:

var markers = [
  {latLng: [45.616944, 9.2825], name: 'Italian Grand Prix'},
  {latLng: [52.0732605, -1.0166426], name: 'British Grand Prix'},
  {latLng: [43.7345, 7.4214], name: 'Monaco Grand Prix'},
  {latLng: [49.332, 8.58], name: 'German Grand Prix'}, ...]

我实现了这个功能:

var j=0;
for (i = 0; i < ret.length; i+=3)
{
  markers[j].latLng[0] = ret[i];
  markers[j].latLng[1] = ret[i+1];
  markers[j].name = ret[i+2];
  j++;
 }

我收到此错误:

Uncaught TypeError: Cannot read property '0' of undefined

在 for 的第一行。

我用谷歌搜索了一段时间,但似乎 javascript 并没有真正支持多个数组。您能帮助我正确实现吗?

最佳答案

您必须手动创建一个对象。这是一种可能的方法:

var markers = [];
for (var i = 0; i < ret.length; i+=3) {
  markers.push({
    latLng: [ret[i], ret[i+1]],
    name: ret[i+2]
  });
}

这里我删除了j变量,将其替换为push;这种方式看起来更加简洁易读。

至于错误 - 请注意,JavaScript 中没有自动激活之类的东西。这个表情...

markers[j].latLng[0]

...是这样处理的:

  • 首先,JS 尝试查找 markers 变量的值,
  • 然后它尝试获取该值的名称等于 j 的属性(循环第一步为 0)
  • 然后它会尝试获取上一步中找到的值的 latLng 属性
  • 最后,该值的 0 属性填充为 ret[i] 值。

显然,如果这些步骤中的任何一个导致未定义,则后续尝试查询未定义的任何属性都会导致错误。

关于Javascript multidim 数组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34439200/

相关文章:

c++ - std::tr1::array 编译错误

java - 获取java中特殊字符前的字符串值

javascript - 如何在javascript中过滤多维数组中的对象?

javascript - 使用 Fetch APi 时如何设置请求头的 content-type

C++ 程序自动舍入数组中除第一个值以外的 double 值

c++ - 使用模板友元函数 C++ 无效使用非静态数据成员错误

javascript - 在每个循环中只有数组中的最后一个元素被连接起来

c - 二维结构 C 数组的未定义行为

javascript - jQuery 插件 nanoScroller 刷新内容

javascript - jQuery Validator,以编程方式显示错误