ID非公開さん
2022/1/24 0:27
1回答
JavaScriptにて今、
JavaScriptにて今、 連想配列と、for〜inループを勉強しています。 以下の質問の方法が、いろいろ探してもなくて、全くわかりません。 教えていただけると助かります。 function swap(obj){ //※ここ } const obj1 = {A : 1,B :2,C :3}; const obj2 ={1:'A',2:'B',3:'C'}; それで例えば swap(obj1)が{1:'A',2:'B',3:'C'}を返し swap(obj2)が{A:'1',B:'2',C:'3'}を返すようにするという問題です。 //※ここ の所ですが、皆さんならどう書かれますか? 色んなやり方があるかもしれませんが、 自分だったら…というのがあれば、教えてください。 すみませんが、よろしくお願いいたします。
JavaScript・36閲覧
ベストアンサー
連想配列の「キー」と「値」を入れ替える、 という内容やね。 ■■■ for-in ループで実装 ■■■ ──────────────── for( let key in obj ) { ~ } ──────────────── という for() ループの中では、 ループ変数 key が連想配列のキーになり、 obj[ key ] が値になる。 obj のキーと値が入れ替わった配列を返すには、 新しい空っぽの連想配列に、 for-in のループでそのキーと値を入れ替えた要素を入れて行って、 その結果を返せばいい。 ──────────────── function swap( obj ) { // 空っぽの連想配列 let sw = new Object(); // キー ⇔ 値 を入れ替えて追加 for( let key in obj ) { sw[ obj[ key ] ] = key; } // 結果を返す return sw; } ──────────────── 全体のソースコードは、 ──────────────── // 元の連想配列 const obj1 = { "A": 1, "B": 2, "C": 3 }; // キー⇔値入れ替え関数 function swap( obj ) { let sw = new Object(); for( let key in obj ) { sw[ obj[ key ] ] = key; } return sw; } // 確認 console.log( swap( obj1 ) ); //→ { "1": "A", "2": "B", "3": "C" } ──────────────── ■■■ 別解1 ■■■ for-in を使わずに、 Object.entries() で配列 [ キー, 値 ] のリストを取得し、 reverse() で [ 値, キー ] に入れ替えて、 Object.fromEntries() で連想配列にもどす、 という方法もある。 ──────────────── // 元の連想配列 const obj1 = { "A": 1, "B": 2, "C": 3 }; // キー⇔値入れ替え関数 function swap( obj ) { return Object.fromEntries( Object.entries( obj ).map( arr => arr.reverse() ) ) } // 確認 console.log( swap( obj1 ) ); //→ { "1": "A", "2": "B", "3": "C" } ──────────────── ■■■ 別解2 ■■■ Object.keys() と Object.values() で、 連想配列 obj のキー、値、それぞれのリストを取得して、 それを for() ループで回し、 新しい連想配列にキーと値を逆にして追加していく、 という方法もある。 ──────────────── // 元の連想配列 const obj1 = { "A": 1, "B": 2, "C": 3 }; // キー⇔値入れ替え関数 function swap( obj ) { const keys = Object.keys( obj ); const values = Object.values( obj ); const sw = new Object(); for( let i=0; i<keys.length; i++ ){ sw[ values[ i ] ] = keys[ i ]; } return sw; } // 確認 console.log( swap( obj1 ) ); //→ { "1": "A", "2": "B", "3": "C" } ────────────────
ID非公開さん
質問者2022/1/24 8:35