質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

498閲覧

二次配列から特定の値を取り出す方法

EVAEVE

総合スコア3

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/06/07 01:33

前提・実現したいこと

var data1 = [ [8,"a"],[5,"b"],[12,"c"] ...]

のように、dataに値が代入されているとして、そこから

var data2 = ["b","a","c"]

のように、keyとなる数値(5,8,12...)の順番で、取り出したい場合はどのようにしたら良いのでしょうか?

ご教授の程宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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()メソッドに与えている関数は並び替えのための比較関数です。
関数の引数abは配列の中身、つまり今回の場合は長さ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

reosablo

総合スコア339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EVAEVE

2020/06/07 08:22

reosablo様 ご丁寧な説明ありがとうございます。 参考に作成してみます。ありがとうございます。
guest

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]);

追記

または、 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));

追記

コメントにも返信しましたが、ご質問の要件が

  • 配列data1の要素である長さ2の配列の先頭要素の値(key)の昇順に、2番目の要素のアルファベットを取り出した配列を data2 として得たい

ということなのでしたら、以下のように sort を使えば得られます。

javascript

1const data2 = [...data1].sort(([k1],[k2]) => k1 - k2).map(([k,v]) => v);

投稿2020/06/07 02:11

編集2020/06/07 03:40
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EVAEVE

2020/06/07 02:48

jun68ykt様 ありがとうございます。 私自身も理解できるよう、調べながらしてみます。 お聞きしたいのですが、keyが予め決まっいない場合はまた記述は変わってきますか?
jun68ykt

2020/06/07 03:37

コメントありがとうございます。 > keyが予め決まっいない場合 ということは、こういうことでしょうか? 与えられる data1 は [ [8,"a"], [5,"b"], [12,"c"] ] であるかもしれないし、 [ [3,"a"], [2,"b"], [1,"c"] ] だったり [ [10,"a"], [20,"b"], [15,"c"] ] であるかもしれない。 いずれの場合も、やりたいことが、 配列data1の要素である長さ2の配列の先頭要素の値(key)の昇順に、2番目の要素のアルファベットを取り出した配列を data2 として得たい ということなのでしたら、以下のように sort を使えば得られます。 const data2 = [...data1].sort(([k1],[k2]) => k1 - k2).map(([k,v]) => v); 動作確認用 CodePen: https://codepen.io/jun68ykt/pen/eYJNVBx?editors=0012
EVAEVE

2020/06/07 08:21

jun68ykt様  丁寧なご説明ありがとうございます。参考に記述してみます。
jun68ykt

2020/06/07 08:49

どういたしまして????参考になれば幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問