電子書籍の厳選無料作品が豊富!

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";
---------------------------------------------------------------------

A 回答 (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>
    • good
    • 0

この場合 new Array() は {} で十分です。


#本来の意図では [] かな???

それから、ハッシュは仕様上キーの順序を保証しないので
それを当てにしたプログラムを作ってはいけません。
IEや FireFoxでは大丈夫みたいですが、
いつか駄目になっても文句は言えません。
#Arrayはちょっと特殊なハッシュです。

順序は添え字に数字を使った配列などを使って管理するのが
よいと思います。
    • good
    • 0

デリーとして追加してみては?



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";

補足日時:2011/06/28 17:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!