• 締切済み

JavaScriptの連想配列について

myArray = new Array();  myArray["A001"] = new Array();   myArray["A001"]["B001"] = "B001";   myArray["A001"]["B002"] = new Array();    myArray["A001"]["B002"]["C001"] = "C001";    myArray["A001"]["B002"]["C002"] = "C002";  myArray["A002"] = "A002"; JavaScriptの連想配列について質問させて頂きます。 例えば上記のような配列があったとして、値とキーはそのままで "C001" と "C002" の"B002"配列への格納順序だけ入れ替えたい場合、 どのように実装すればよろしいでしょうか? ちなみにキーや値はサンプルで実際にはsort出来るルールはありません。。。 ※入れ替え後のイメージ --------------------------------------------------------------------- myArray = new Array();  myArray["A001"] = new Array();   myArray["A001"]["B001"] = "B001";   myArray["A001"]["B002"] = new Array();    myArray["A001"]["B002"]["C002"] = "C002"; ←格納順序が    myArray["A001"]["B002"]["C001"] = "C001";  入れ替わった  myArray["A002"] = "A002"; ---------------------------------------------------------------------

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

配列に関する誤解があるのででしょうね、 そもそもキーと値が同じである必要性も感じません。 きちんと配列でやるなら、仮に連続したC002とC003をひっくり返すとして こんなやり方でよいかもしれません。 (念のためキーと値を同じ値を持たせておきますが・・・) <script> myArray = new Object(); myArray["A001"] = new Object(); myArray["A001"]["B002"] = new Array(); myArray["A001"]["B002"][0] = {key:"C001",value:"C001"} myArray["A001"]["B002"][1] = {key:"C002",value:"C002"} myArray["A001"]["B002"][2] = {key:"C003",value:"C003"} myArray["A001"]["B002"][3] = {key:"C004",value:"C004"} myArray["A001"]["B002"][4] = {key:"C005",value:"C005"} var arr=myArray["A001"]["B002"]; for(var i=0;i<arr.length;i++){ document.write(arr[i].value+"<br>"); } arr=arr.sort(function(a,b){return (a.value=="C002" && b.value=="C003")?1:0}) for(var i=0;i<arr.length;i++){ document.write(arr[i].value+"<br>"); } </script>

回答No.2

この場合 new Array() は {} で十分です。 #本来の意図では [] かな??? それから、ハッシュは仕様上キーの順序を保証しないので それを当てにしたプログラムを作ってはいけません。 IEや FireFoxでは大丈夫みたいですが、 いつか駄目になっても文句は言えません。 #Arrayはちょっと特殊なハッシュです。 順序は添え字に数字を使った配列などを使って管理するのが よいと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

デリーとして追加してみては? delete(myArray["A001"]["B002"]["C001"]); myArray["A001"]["B002"]["C001"] = "C001";

cooldog1234
質問者

補足

回答ありがとうございます。 でも、すみません、省略しすぎて伝え切れなかったです。 本来は下記のように配列が複数存在します。 要素が2つなら delete できますが、要素が複数なため使えないと認識しています。 ---------------------------------------------------------------------   myArray["A001"]["B002"] = new Array();    myArray["A001"]["B002"]["C001"] = "C001";    myArray["A001"]["B002"]["C002"] = "C002";    myArray["A001"]["B002"]["C003"] = "C003";    myArray["A001"]["B002"]["C004"] = "C004";    myArray["A001"]["B002"]["C005"] = "C005"; ※入れ替え後↓   myArray["A001"]["B002"] = new Array();    myArray["A001"]["B002"]["C001"] = "C001";    myArray["A001"]["B002"]["C003"] = "C003"; ←格納順序が    myArray["A001"]["B002"]["C002"] = "C002";  入れ替わった    myArray["A001"]["B002"]["C004"] = "C004";    myArray["A001"]["B002"]["C005"] = "C005"; --------------------------------------------------------------------- あとこれも悩んでる1つ原因なんですが、 入れ替える際、持っている情報は、下記の様な 「目当ての配列までのキーを "-" で繋いだ String 」です。 var irekae1 = "A001-B002-C002"; var irekae2 = "A001-B002-C003";

関連するQ&A