2015-06-09 82 views
0

我需要一個對象數組映射成這種格式:地圖動態關鍵值

   "Brandenburg Gate, Berlin": {latitude: 52.516272, longitude: 13.377722}, 
      "Dortmund U-Tower": {latitude: 51.515, longitude: 7.453619}, 
      "London Eye": {latitude: 51.503333, longitude: -0.119722}, 
      "Kremlin, Moscow": {latitude: 55.751667, longitude: 37.617778}, 
      "Eiffel Tower, Paris": {latitude: 48.8583, longitude: 2.2945}, 
      "Riksdag building, Stockholm": {latitude: 59.3275, longitude: 18.0675}, 
      "Royal Palace, Oslo": {latitude: 59.916911, longitude: 10.727567} 
      } 

在我的源陣列看起來像

{place: "Brandenburg Gate, Berlin", latitude: 52.5, longitude 13.3 } 

我無法弄清楚如何使place成爲該陣列的關鍵。

_.map(a, function (m) {return m.place: {longitude: m.longitude}}) 

顯然是錯誤的。

+0

你確定這是一個數組?它看起來像JSON – beautifulcoder

+0

@beautifulcoder:絕對不是JSON,以及數據如何被接收/編碼與問題無關。 –

回答

2

迭代這個數組,每個值添加到對象並刪除place屬性:

var obj = {}; 
arr.forEach(function(value) { 
    obj[value.place] = value; 
    delete value.place; 
}); 
+0

謝謝 - 我永遠不會想到這樣做。 – metalaureate

1

預期結果是什麼?

可能:

_.map(a, function (m) { 
    return {"place":m.place, "longitude": m.longitude} 
}) 
0

我假設你有對象的數組?如果是這樣,這將工作(假設你使用基於_.map underscorejs()):

var locationObject = {}; 
_(arrayOfLocations).each(function(location) { 
    locationObject[location.place] = { latitude: location.latitude, longitude: location.longitude }; 
}); 

這會給你一個對象,其中的關鍵是地方和相關的值是包含緯度自己的對象和經度。

2

嘗試:

var result = {}; 
a.forEach(function (item) { 
    result[item.place] = {longitude: item.longitude, latitude: item.latitude}; 
}); 
0

您可以嘗試使用obj.map()和重新映射的所有元素。

下面是一個例子:

<script type="text/javascript"> 
function experiment() { 
var obj = [{place: "Brandenburg Gate, Berlin", latitude: 52.5, longitude: 13.3}, 
     {place: "Dortmund U-Tower", latitude: 51.515, longitude: 7.453619}, 
     {place: "London Eye", latitude: 51.503333, longitude: -0.119722}]; 

/* Mapped Output 
"Brandenburg Gate, Berlin": {latitude: 52.516272, longitude: 13.377722}, 
"Dortmund U-Tower": {latitude: 51.515, longitude: 7.453619}, 
"London Eye": {latitude: 51.503333, longitude: -0.119722}, 
*/ 

// create a new object array 
var reformattedArray = obj.map(function(o){ 
    var rObj = {}; 
    rObj[o.place] = {latitude : o.latitude, longitude : o.longitude}; 
    return rObj; 
}); 
} 
window.onload = experiment; 
</script>