1

再フォーマットしたいJSONオブジェクトがあります。これが私が意味することです...

JSON オブジェクト...

{
"query":"de mar",
"suggestions":[
    "Any Location",
    "Camp De Mar, Majorca, SPAIN",
    "L'amettla De Mar, Costa Dorada, SPAIN",
    "Lloret De Mar, Costa Brava, SPAIN",
    "Malgrat De Mar, Costa Brava, SPAIN",
    "Pineda De Mar, Costa Brava, SPAIN",
    "Roquetas De Mar, Costa De Almeria, SPAIN",
    "Tossa De Mar, Costa Brava, SPAIN"
],
"data":[
    "",
    "DestinationResort|Camp De Mar",
    "DestinationResort|L'Amettla De Mar",
    "DestinationResort|Lloret De Mar",
    "DestinationResort|Malgrat De Mar",
    "DestinationResort|Pineda De Mar",
    "DestinationResort|Roquetas De Mar",
    "DestinationResort|Tossa De Mar"
]
}

これを次のように変更したい...

{
"destinations": [
    "": "Any Location",
    "DestinationResort|Camp De Mar": "Camp De Mar, Majorca, SPAIN",
    // etc etc
]
}

現時点では、次のものがあります(jqueryコーディングの哀れな使用)...

$("#search").on("input", function() {
  $.getJSON( "http://holidays.allinclusive.co.uk/external/destinations.ashx?query=" + $("#search").val() )
  .done(function(data) {
    var myObject = ['destinations'];
    $.each(data.suggestions, function (index, elem) {
      myObject['destinations'] = {[data.data[index]] : [elem] };
    });
  })
});

私が実際にやろうとしているのは、これを autocomplete() または bootstrap の typehead() で使用して入力を設定することですが、これが次のステップだと思います。

誰か助けてください。

ありがとう

4

2 に答える 2

4

かなり近づいていますが、新しいオブジェクトの作成にはいくつかの問題があります。

var myObject = ['destinations'];

これにより、文字列 "destinations" という単一の要素を持つ配列が作成されます。実際に必要なのdestinationsは、空の配列であるプロパティを持つオブジェクトなので、次のように変更します。

var myObject = {
    destinations: []
};

.each()反復は正しいですが、各反復のコードは正しくありません。コードが行っていることは、配列を取得しmyObject、そのdestinationsプロパティ (最初の反復には存在しない) を現在の反復のオブジェクトに等しく設定することです。代わりに、新しいオブジェクトを配列にプッシュする必要があります。オブジェクト リテラルの作成時に動的キーを使用できないため、オブジェクトの作成にも問題があります。

$.each(data.suggestions, function (index, elem) {
    var currentObject = {}
    currentObject[data.data[index]] = elem;
    myObject.destinations.push(currentObject);
});

jsFiddle デモ

于 2013-06-11T13:22:08.057 に答える
0

悪くないスタートです!少しだけ再配置する必要があります。

var myObject = {'destinations': []};
$.each(data.suggestions, function (index, elem) {
  myObject.destinations[data.data[index]] = elem;
});

ご覧のとおり、配列である「宛先」として知られる1つの「キー」で説明したように、myObjectをjsonオブジェクトにする必要があります。空の配列から始めて、後でインデックスを設定します。

于 2013-06-11T13:23:14.633 に答える