将数组元素添加到现有的javascript数组中

时间:2011-12-28 03:19:49

标签: javascript arrays

我想将两个来源的地理数据(逻辑/纬度)读入一个Javascript数组。我创建了一个带有数组的javascript对象来保存这些数据

这是我的对象定义:

var GeoObject = {   
    "info": [ ]
};

当读取两个数据源时,如果键RecordId已存在于数组中,则将新数组元素(lat& lon)附加到现有GeoObject,否则添加新数组记录。

例如,如果RecordId 99999尚不存在,则添加数组(如SQL添加)

GeoObject.info.push( 
{  "RecordId": "99999" , "Bing_long": -75.0000, "Bing_lat": 41.0000 } )

如果记录99999已存在,则将新数据附加到现有数组(如SQL更新)。

GeoObject.info.update???( 
{  "RecordId": "99999" , "Google_long": -75.0001, "Google_lat": 41.0001 } )

当应用程序完成时,对象中的每个数组都应该有五个数组元素,包括RecordId。例子:

[  "RecordId": "88888" , "Bing_long": -74.0000, "Bing_lat": 40.0001, "Google_long": -74.0001, "Bing_long": -70.0001 ]
[  "RecordId": "99999" , "Bing_long": -75.0000, "Bing_lat": 41.0001, "Google_long": -75.0001, "Bing_long": -75.0001 ]

我希望我很清楚。这对我来说很新,有点复杂。

对于这种情况,对象定义可能并不理想。

1 个答案:

答案 0 :(得分:1)

我会制作一个物体对象。

var GeoObject = {
  // empty
}

function addRecords(idAsAString, records) {
  if (GeoObject[idAsAString] === undefined) {
    GeoObject[idAsAString] = records;
  } else {
    for (var i in records) {
      GeoObject[idAsAString][i] = records[i];
    }
  }
}

// makes a new
addRecords('9990', { "Bing_long": -75.0000, "Bing_lat": 41.0000 });
//updates:    
addRecords('9990', { "Google_long": -75.0001, "Google_lat": 41.0001 });

这为您提供了一个如下所示的对象:

GeoObject = { '9990' : { "Bing_long": -75.0000, 
                         "Bing_lat": 41.0000,
                         "Google_long": -75.0001,
                         "Google_lat": 41.0001 }
}

第二条记录看起来像这样:

GeoObject = { '9990' : { "Bing_long": -75.0000, 
                         "Bing_lat": 41.0000,
                         "Google_long": -75.0001,
                         "Google_lat": 41.0001 },

              '1212' : { "Bing_long": -35.0000, 
                         "Bing_lat": 21.0000 }
}