0

返されたオブジェクトリストがあります:data.d [15]

そしてそれの1つのサンプル:

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

1つのオブジェクトに変換したい

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. 都市名を含む文字列プロパティは1つだけです。
  3. 都市IDを含む数値プロパティは1つだけです。
于 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 に答える