【问题标题】:How to populate array with multiple data types inside?如何在内部填充具有多种数据类型的数组?
【发布时间】:2018-06-13 10:37:33
【问题描述】:

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

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

  }

标记数组看起来像这样(手动填充,而不是 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' 具有比标记数组更多的嵌套对象时,就会出现元素问题。我只想将 'obj' 中的其余嵌套对象添加到标记中。为什么我在 for 循环中添加新元素时标记数组没有动态增长?

【问题讨论】:

    标签: javascript arrays


    【解决方案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);
    
    }
    

    我猜你没有将类型分配为对象,所以出错了。

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

    【讨论】:

    • 你的说法不正确,数组会动态增长。您可以尝试像这样的简单测试let arr = []; arr[2] = 'abc' console.log(arr)
    • 抱歉英语不好。这不是我的意思。我将声明修改为“不应该”。对此感到抱歉。
    • 据我所知,数组在 javascript 中会快速增长,但我无法弄清楚为什么我的代码不起作用,无论如何您编写的解决方案对我有用,谢谢!
    【解决方案2】:

    您可以使用obj.results.bindings 中的forEach,然后构造您想要的每个标记,并最终按如下方式推入数组中

    let obj = {
    	results: {
      	bindings: [
              { placeName: 'cali',  lat: '123',  long: '456' },
              { placeName: 'hawaii',  lat: '555',  long: '333'},
              { placeName: 'korea',  lat: '777',  long: '888' }]
            }
    };
    
    let markers = [];
    obj.results.bindings.forEach(item => {
    	let mar = { content: '', coords: {}};
      mar.content = item.placeName;
      mar.coords.lat = Number(item.lat);
      mar.coords.lng = Number(item.long);
      
      markers.push(mar)
    })
    
    console.log(markers)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多