将对象数组转换为对象

时间:2012-06-07 12:03:42

标签: javascript jquery arrays object

我有一个返回的对象列表: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));
            });

2 个答案:

答案 0 :(得分: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的数字属性。

答案 1 :(得分: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;
}