如何在里面填充多种数据类型的数组?

时间:2018-06-13 02:09:24

标签: javascript arrays

我想填充包含对象和字符串的“markers”数组。我有一个存储在obj变量中的另一个javascript对象,我想从中提取数据并将其存储到markers数组中。 我用以下代码填充数组

  for (i = 0; i < obj.results.bindings.length; i++) { 
    markers[i].content = obj.results.bindings[i].placeName.value;
    markers[i].coords.lat = Number(obj.results.bindings[i].lat.value);
    markers[i].coords.lng = Number(obj.results.bindings[i].long.value);

  }

和markers数组看起来像这样(手动填充,而不是for循环)

var markers = [
    {
      coords:{lat:37.8707,lng:32.5050},
      content:'<h1>Mevlana museum</h1>'
    },
    {
      coords:{lat:37.8699,lng:32.4993},
      content:'<h1>Kapu Camii</h1>'
    },
    {
      coords:{lat:37.8749,lng:32.4931},
      content:'<h1>Karatay Madrasa</h1>'
    },
    {
      coords:{lat:37.8749,lng:32.4931},
      content:'<h1>Karatay Madrasa</h1>'
    },
    {
      coords:{lat:37.8749,lng:32.4931},
      content:'<h1>Karatay Madrasa</h1>'
    }
  ];  

现在当javascript对象'obj'具有与标记元素相同数量的嵌套对象时,它可以正常工作但是当'obj'具有更多嵌套对象而不是markers数组时元素有问题。我只想将'obj'中的其余嵌套对象添加到标记中。当我在for循环中添加新元素时,为什么标记数组不会增长?

2 个答案:

答案 0 :(得分:1)

这个怎么样?

数组不应该动态增长。你可以使用push / pop方法。

markers = [];

for (i = 0; i < obj.results.bindings.length; i++) { 
    markers.push({
        content : obj.results.bindings[i].placeName.value,
        coords : {
          lat : Number(obj.results.bindings[i].lat.value),
          lng : Number(obj.results.bindings[i].long.value)
        }
    })

}

我再次尝试使用您的代码:

for (i = 0; i < obj.results.bindings.length; i++) {
    markers[i] = {};
    markers[i].content = obj.results.bindings[i].placeName.value;
    markers[i].coords= {};
    markers[i].coords.lat = Number(obj.results.bindings[i].lat.value);
    markers[i].coords.lng = Number(obj.results.bindings[i].long.value);

}

我猜你没有将类型指定为对象,所以它出错了。

如果这也有效,请告诉我。

答案 1 :(得分:1)

您可以使用forEach的{​​{1}}然后构建您想要的每个标记,并最终按如下方式插入数组

obj.results.bindings