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

2 回答 2

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。
于 2012-06-07T12:18:11.070 回答
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;
}
于 2012-06-07T12:48:04.440 回答