- 締切済み
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"; ---------------------------------------------------------------------
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
配列に関する誤解があるのででしょうね、 そもそもキーと値が同じである必要性も感じません。 きちんと配列でやるなら、仮に連続した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>
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
この場合 new Array() は {} で十分です。 #本来の意図では [] かな??? それから、ハッシュは仕様上キーの順序を保証しないので それを当てにしたプログラムを作ってはいけません。 IEや FireFoxでは大丈夫みたいですが、 いつか駄目になっても文句は言えません。 #Arrayはちょっと特殊なハッシュです。 順序は添え字に数字を使った配列などを使って管理するのが よいと思います。
- yambejp
- ベストアンサー率51% (3827/7415)
デリーとして追加してみては? delete(myArray["A001"]["B002"]["C001"]); myArray["A001"]["B002"]["C001"] = "C001";
補足
回答ありがとうございます。 でも、すみません、省略しすぎて伝え切れなかったです。 本来は下記のように配列が複数存在します。 要素が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";