2012-07-03 168 views
1

我有這個功能創建JavaScript對象

// add history paths and save data 
function AddPath(strTag, strUserName, arrayLatLngPoints, pathColour) { 

    for (var i = 0; i < arrayLatLngPoints.length; i++) 
    { 
    var point = arrayLatLngPoints[i]; 
    var date = new Date(parseInt(point.timestamp)); 
    addMarkers(point.timestamp, point.lat, point.lng, point.timestamp, strUserName, pathColour, date.toString()); 
    date = null; 
    } 
} 

以及與addMarkers添加標記()我想存儲緯度,經度和時間戳中的對象。

我想存儲會是這樣

{ strUserName : { timestamp : point.timestamp , LatLng : point.LatLng }, strUserName : { timestamp : point.timestamp , LatLng : point.LatLng } } 

{ strUserName : { timestamp : point.timestamp , LatLng : { lat : point.lat, lng : point.lng } }, .. 

如何創建該對象的最佳方式?

UPDATE:

感謝您的答覆。 我曾嘗試以下..

// add history paths and save data 
function AddPath(strTag, strUserName, arrayLatLngPoints, pathColour) { 

    for (var i = 0; i < arrayLatLngPoints.length; i++) 
    { 
    var point = arrayLatLngPoints[i]; 
    var pos = new google.maps.LatLng(point.lat, point.lng); 

    var history = { 
     strUserName : { 
      timestamp : point.timestamp , 
      LatLng : pos 
     } 
    }; 

    var date = new Date(parseInt(point.timestamp)); 
    addMarkers(point.timestamp, point.lat, point.lng, point.timestamp, strUserName, pathColour, date.toString()); 
    date = null; 
    } 
console.log(history); 
} 

控制檯中看到的 screenshot

的用戶名沒有工作和IM沒有得到一個項目的每一個時間戳,它只是覆蓋一個條目截圖?

+5

又有什麼問題? – antyrat

回答

3

如何創建此對象?

差不多完全像你這樣做:

var obj = { strUserName : { timestamp : point.timestamp , LatLng : point.LatLng }, strUserName : { timestamp : point.timestamp , LatLng : point.LatLng } }; 

或者其可讀性:

var obj = { 
    strUserName : { 
     timestamp : point.timestamp , 
     LatLng : point.LatLng 
    }, 
    strUserName : { 
     timestamp : point.timestamp , 
     LatLng : point.LatLng 
    } 
}; 

這是一個object initializer。它使用給定的屬性(實際上是三個新對象)創建一個新對象,並返回對其最外層的引用。

採取一些簡單的例子:

// Create a blank object (an object with no properties of its own): 
var a = {}; 

// Create an object with a `name` property with the value "Fred" 
var b = {name: "Fred"}; 

// Create an object with a `foo` property, which is *another* freshly-created 
// object with a `name` property with the value "Barney" 
var c = { 
    foo: { 
     name: "Barney" 
    } 
}; 

重新更新的問題:

的用戶名沒有工作和IM沒有得到一個項目的每一個時間戳,它只是覆蓋一個條目?

當然,它是,你在每個循環覆蓋history,沒有存儲在任何地方的早期副本。舉例來說,你可以將它們存儲在一個數組:

// add history paths and save data 
function AddPath(strTag, strUserName, arrayLatLngPoints, pathColour) { 

    var historyArray = []; 
    for (var i = 0; i < arrayLatLngPoints.length; i++) 
    { 
    var point = arrayLatLngPoints[i]; 
    var pos = new google.maps.LatLng(point.lat, point.lng); 

    historyArray[i] = { 
     strUserName : { 
      timestamp : point.timestamp , 
      LatLng : pos 
     } 
    }; 

    var date = new Date(parseInt(point.timestamp)); 
    addMarkers(point.timestamp, point.lat, point.lng, point.timestamp, strUserName, pathColour, date.toString()); 
    date = null; 
    } 
console.log(historyArray); 
} 
+0

試過這個,更新後的問題與結果 –

+0

@VinceLowe:*「用戶名沒有工作,我沒有得到一個項目的每個時間戳,它只是覆蓋一個條目?」*當然,它是,你覆蓋'歷史'在每個循環中,不在任何地方存儲較早的副本。我已經更新了答案,以顯示*一個*可能的方式來存儲它們(在一個數組中)。 –

0
var obj = {strUserName: {timestamp: point.timestamp, lat: point.lat, long: point.long}}