2012-06-07 212 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; 
}