2012-06-07 209 views
0

我有一個返回的對象列表:data.d [15]轉換對象數組到對象

和它的一個樣本:

data.d[3] = { 
CityId: 2, 
CityName: "Ankara"} 

我想將其轉換爲一個對象

cities{ 
1: "Istanbul", 
2: "Ankara", 
3: "New York" 
} 

它應該是通用的,所以我不知道「CityId」和「CityName」字段名稱。 它的最佳方法是什麼?

謝謝大家...我已經通過字段對象發送字段名 - 沒有對此代碼重要的依賴關係 - 已解決。

  var url = this.options.url + "/" + field.values, 
       id = field.fieldId, 
       title = field.fieldTitle; 

      this.getJSON(url, {}, function (rData) { 
       var obj = {}; 

       for (i = 0; i < rData.d.length; i++) 
        obj[rData.d[i][id]] = rData.d[i][title]; 

       $("#" + parentId).html(self.getHtmlOfFormData(type, obj)); 
      }); 
+0

如果你不知道'CityName',那麼如何我們應該知道投影什麼? –

+1

我無法真正看到這兩部分數據之間的關聯以及它如何可以通用。也許你需要更具體。 – Jivings

+0

我只想把第一個值作爲ID,第二個值作爲沒有FieldName依賴關係的Val。 – efirat

回答

2

也許你需要檢測哪個屬性包含城市名稱。也許這樣的事情可以工作?

var idprop, nameprop; 
for (var prop in data.d[0]) { 
    if (typeof data.d[0][prop] === "string") nameprop = prop; 
    if (typeof data.d[0][prop] === "number") idprop = prop; 
} 

var cities = {}; 
for (var i = 0; i < data.d.length; i++) 
    cities[data.d[i][idprop]] = data.d[i][nameprop]; 

請記住,這個工程如果:

  1. data.d不是一個空數組;
  2. 只有一個字符串屬性包含城市名稱;
  3. 只有一個數字屬性包含城市ID。
+0

i + 1應該是data.d [i] .CityId – Chango

+0

@Chango也許,但我們需要確認kirlisakal – MaxArt

+0

這很聰明! – Chango

1

如果我理解你的問題,你正試圖將一些AJAX回報,看起來像這樣:

data.d = [ 
    { 
     cityId: someNumber1, 
     cityName: someName1 
    }, 
    { 
     cityId: someNumber2, 
     cityName: someName2 
    } 
]; 

成一個對象,它看起來像這樣:

cities = { 
    someNumber1: someName1, 
    someNumber2: someName2 
}; 

片段像這將做的竅門:

var cities = {}; 
for (var i = 0; i < data.d.length; i++) { 
    cities[data.d[i].cityId] = data.d[i].cityName; 
}