0

私は次のようなjson配列を取得します

   [{"Childid":17,"ChildName":"A","Parentid":81,"ParentName":"AA"},  
   {"Childid":2,"ChildName":"B","Parentid":81,"ParentName":"AA"},
   {"Childid":6,"ChildName":"B","Parentid":82,"ParentName":"AB"},
   {"Childid":5,"ChildName":"A","Parentid":82,"ParentName":"AB"}]

これから私は選択リストを構築しようとしています。しかし、optgroup の状況で立ち往生しました。最初に、配列からすべての一意の親名を見つけようとしています。これは opt グループとして機能します。

 var cnames = [];
                   $.each(data, function (index, value) {
                    if ($.inArray(value.ParentName, cnames) == -1) {
                        cnames.push(value.ParentName);
                    }
                });

次に、両方の配列で反復を行い、オプション [子の名前とプロパティ] を設定します。

 $.each(cnames, function (index, value) {
   var begin = index;
   data = $.map(data, function (item, a) {
   if (value == item.ParentName) {
   return begin == index ? "<optgroup label='" + item.ParentName + "'><option value=" + item.Childid + ">" + item.ChildName + "</option>" : "<option value=" + item.Childid + ">" + item.ChildName + "</option>";
  }
});
});

しかし、私は次のような出力を得ます。

ここに画像の説明を入力

原因 begin は常にループ後に =0 です。1 回の呼び出しでこれらの反復をすべて回避できますか。

アップデート:


のような変更を行いました

 $.each(cnames, function (index, value) {
                    var begin = index;
                    data = $.map(data, function (item, a) {
                        if (value == item.ParentName) {
                            begin += 1;
                            return begin-1 == index ? "<optgroup label='" + item.ParentName + "'><option value=" + item.Childid + ">" + item.ChildName + "</option>" : "<option value=" + item.Childid + ">" + item.ChildName + "</option>";
                        }

                    });
                });

しかし、これは optgroup を閉じません。

4

1 に答える 1