2012-06-07 2 views
0

У меня есть список, возвращенный объект: data.d [15]Преобразовать массив объектов на объект

и один образец из него:

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

Я хочу, чтобы преобразовать его в один объект, как

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

И он должен быть общим, поэтому я не знаю названия полей «CityId» и «CityName». Каков наилучший способ для этого?

Благодарю вас всех ... у меня есть имена полей по полю -no-зависимые значения, важные для этого кода, - он был разрешен.

  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

Я просто хочу получить первое значение как идентификатор и второе значение как Val без зависимостей FieldName. – 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. есть только одно числовое свойство, которое содержит идентификатор города.
+0

i + 1 должен быть data.d [i] .CityId – Chango

+0

@Чанго Может быть, но нам нужно подтверждение от kirlisakal – MaxArt

+0

Это было очень умно! – Chango

1

если я понял ваш вопрос, вы пытаетесь преобразовать некоторые АЯКС доход, который выглядит следующим образом:

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; 
}