前提・実現したいこと
var data1 = [ [8,"a"],[5,"b"],[12,"c"] ...]
のように、dataに値が代入されているとして、そこから
var data2 = ["b","a","c"]
のように、keyとなる数値(5,8,12...)の順番で、取り出したい場合はどのようにしたら良いのでしょうか?
ご教授の程宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
元の2次元配列を並び替えてから値を取り出すという手順で可能です。
js
1// ES5 2var data2 = data1.sort(function(a, b){ return a[0] - b[0]; }).map(function(a){ return a[1]; });
.sort()
メソッドに与えている関数は並び替えのための比較関数です。
関数の引数a
とb
は配列の中身、つまり今回の場合は長さ2の1次元配列です。
numbers.sort(function(a, b){ return a - b; })
で数値の一次元配列の並び替えができるというのが典型的な使用例です。
.map()
メソッドで配列の中身を変換しています。
関数の引数a
は同じく配列の中身です。
なお、実行環境が新しければ次のようにも書けます。詳しく知りたければアロー関数、分割代入を見てみてください。
js
1// ES2015 2let data2 = data1.sort(([a], [b]) => a - b).map(([k, v]) => v);
投稿2020/06/07 03:18
総合スコア339
0
こんにちは、以下のようにしてみるといかがでしょうか?
javascript
1const data1 = [ [8,"a"], [5,"b"], [12,"c"] ]; 2const keys = [ 5, 8, 12 ]; 3 4const data2 = keys.map(key => data1.find(e => e[0] === key)[1]);
- 動作確認用CodePen: https://codepen.io/jun68ykt/pen/NWxqXej?editors=0012
追記
または、 data1
の内容を含むMapを作っておくという手もあります。
javascript
1const data1 = [ [8,"a"], [5,"b"], [12,"c"] ]; 2const map1 = new Map(data1); 3 4const keys = [ 5, 8, 12 ]; 5 6const data2 = keys.map(key => map1.get(key));
- 動作確認用CodePen: https://codepen.io/jun68ykt/pen/gOPpoqM?editors=0012
追記
コメントにも返信しましたが、ご質問の要件が
- 配列
data1
の要素である長さ2の配列の先頭要素の値(key)の昇順に、2番目の要素のアルファベットを取り出した配列をdata2
として得たい
ということなのでしたら、以下のように sort を使えば得られます。
javascript
1const data2 = [...data1].sort(([k1],[k2]) => k1 - k2).map(([k,v]) => v);
- 動作確認用CodePen: https://codepen.io/jun68ykt/pen/eYJNVBx?editors=0012
投稿2020/06/07 02:11
編集2020/06/07 03:40総合スコア9058
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/07 02:48
2020/06/07 03:37
2020/06/07 08:21
2020/06/07 08:49
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。