我怎样才能从数组中获取值

时间:2015-06-10 07:30:22

标签: javascript arrays

我将多个值存储在一个数组中,如:

var locations = [
    'Bhopal','Mobile',new google.maps.LatLng(18.40,78.81),'images/mobile.png',
    'Bangalore','Television',new google.maps.LatLng(18.30,83.90),'images/television.png',
    'Hyderabad','Footwear',new google.maps.LatLng(22.95,88.42),'images/footwear.png',
    'Kolkata','Kitchen',new google.maps.LatLng(22.58,88.33),'images/kitchen.png',
    'Mumbai','Furniture',new google.maps.LatLng(26.16,85.88),'images/furniture.png'
];

这里我在这里获得新的latlng值

function drop() {
  clearMarkers();
  for (var i = 0; i < locations.length; i++) {
    addMarkerWithTimeout(locations[i], i * 200);
  }
}

我需要的是,drop函数从数组获取LatLng,我也需要获得前两个值,如'bhopal'和'mobile'并提醒它。我怎么能得到那个?

7 个答案:

答案 0 :(得分:1)

function drop() {
  clearMarkers();
  for (var i = 0; i < locations.length / 4; i++) {
    // locations[2 + 4*i]  = latlng value  google.maps, ....
    // locations[4*i]  =  first column, Bhopal, Bangalore, ...
    // locations[1+4*i] = second column, Mobile, Television, ...
    // locations[3+4*i] = last column image
  }
}

答案 1 :(得分:1)

正如我所看到的,您将数据保持在奇怪的表示中。 最好保持这种格式: var locations = [     {location:'Bhopal',type:'Mobile',latlng:new google.maps.LatLng(18.40,78.81),iamge:'images / mobile.png'},     {location:'Bhopal',type:'Mobile',latlng:new google.maps.LatLng(18.40,78.81),iamge:'images / mobile.png'},     {location:'Bhopal',type:'Mobile',latlng:new google.maps.LatLng(18.40,78.81),iamge:'images / mobile.png'},     {location:'Bhopal',type:'Mobile',latlng:new google.maps.LatLng(18.40,78.81),iamge:'images / mobile.png'}, ]。 但是,如果你想保留你的格式(或者你不能修改它),你可以这样做: for(var i = 0; i&lt; locations.length; i + = 4){      警报(位置[I]);      警报(地点[I + 1]);  }

答案 2 :(得分:1)

首先,您的数据结构似乎不符合您的目的。

您需要一个关联数组,而不是普通数组。

一个粗略的例子:

var locations = [
    {"city":"Bhopal","type":"Mobile","latitude":123491283},
    {"city":"Paris","type":"SomethingElse","latitude":2342342},
    {"city":"Milano","type":"Landline","latitude":56456545}
]

基本上,&#39;对象&#39;在一个数组内。

现在您可以像这样访问它:

 for (var i = 0; i < locations.length; i++) {
     var city = locations[i].city;
     var city = locations[i].type;
     var latitude = locations[i].latitude;
 }

不是你要求的,但是嘿..

答案 3 :(得分:1)

尝试:

var locations = [
    ['Bhopal','Mobile',new google.maps.LatLng(18.40,78.81),'images/mobile.png'],
    ['Bangalore','Television',new google.maps.LatLng(18.30,83.90),'images/television.png'],
    ['Hyderabad','Footwear',new google.maps.LatLng(22.95,88.42),'images/footwear.png'],
    ['Kolkata','Kitchen',new google.maps.LatLng(22.58,88.33),'images/kitchen.png'],
    ['Mumbai','Furniture',new google.maps.LatLng(26.16,85.88),'images/furniture.png']
];


function drop() {
  clearMarkers();
  for (var i = 0; i < locations.length; i++) {
    addMarkerWithTimeout(locations[i][2], i * 200);
  }
}

答案 4 :(得分:0)

这是第一行的处理方式。

 for (var i = 0; i < locations.length; i=i+4) {
     locations[i] has 'Bhopal'
     locations[i+1] has 'Mobile'
     locations[i+2] has the object
     locations[i+3] has 'images/mobile.png'
 }

在您的代码中相应地使用它们。

答案 5 :(得分:0)

为什么不像这样创建数组:

var locations = [
    {Place : 'Bhopal', Thing : 'Mobile', Location : new google.maps.LatLng(18.40,78.81), Image : 'images/mobile.png'},
    {Place : 'Bangalore',Thing : 'Television',Location : new google.maps.LatLng(18.30,83.90),Image : 'images/television.png'},
    {Place : 'Hyderabad',Thing : 'Footwear',Location : new google.maps.LatLng(22.95,88.42),Image : 'images/footwear.png'}];

以这种方式管理它会更容易。

答案 6 :(得分:0)

如果您打算将数据保留为问题中的格式,那么建议根据每条记录创建function来访问记录长度为4个值,这样您就可以一次又一次地使用它

以下是我所谈论的一个例子

&#13;
&#13;
Number.MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1;

function getRecord(data, recNum) {
  var length;

  if (!Array.isArray(data)) {
    throw new Error('data is not an Array');
  }

  length = data.length;
  if (length < 4 || length % 4 !== 0) {
    throw new Error('data is empty or record length is incorrect');
  }

  if (typeof recNum !== 'number' || recNum < 0 || recNum > Math.floor(Number.MAX_SAFE_INTEGER / 4)) {
    throw new Error('recNum is out of range or not a valid number');
  }

  return data.slice(recNum, recNum + 4);
}

var pre = document.getElementById('out'),
  locations = [
    'Bhopal', 'Mobile', {
      lat: 0,
      lng: 0
    }, 'images/mobile.png',
    'Bangalore', 'Television', {
      lat: 0,
      lng: 0
    }, 'images/television.png',
    'Hyderabad', 'Footwear', {
      lat: 0,
      lng: 0
    }, 'images/footwear.png',
    'Kolkata', 'Kitchen', {
      lat: 0,
      lng: 0
    }, 'images/kitchen.png',
    'Mumbai', 'Furniture', {
      lat: 0,
      lng: 0
    }, 'images/furniture.png'
  ],
  length = Math.floor(locations.length / 4),
  index;

for (index = 0; index < length; index += 1) {
  pre.textContent += JSON.stringify(getRecord(locations, index), null, 2) + '\n\n';
}
&#13;
<pre id="out"></pre>
&#13;
&#13;
&#13;

因此调用getRecord(locations, 0)将返回长度为4的数组和以下数据

[
  "Bhopal",
  "Mobile",
  {
    "lat": 0,
    "lng": 0
  },
  "images/mobile.png"
]

现在您可以访问此数组,其中

索引[0]Bhopal

索引[3]images/mobile.png

将数据重新排列(在源头或一次转换时)的替代方案,使其成为更符合您需求的结构。

可能更合适的结构是

数组数组

[
    [...data0],
    [...dataN]
]

对象数组

[
    {...data0},
    {...dataN}
]