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

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

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

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

Q&A

解決済

5回答

3860閲覧

配列内のオブジェクトの値である配列の、値のみを取り出した配列を作成したい

lg_rino

総合スコア19

JavaScript

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

0グッド

1クリップ

投稿2019/05/15 06:42

以下のような配列があり、

javascript

1const array1 = [ 2 {"members": [{name: "名前1", age: 12}, {name: "名前2", age: 22}]}, 3 {"members": [{name: "名前3", age: 32}]}, 4 {"members": [{name: "名前4", age: 42}, {name: "名前5", age: 52}, {name: "名前6", age: 62}]} 5]

以下のような配列に加工する関数を作りたいです。

javascript

1[ 2 {name: "名前1", age: 12}, 3 {name: "名前2", age: 22}, 4 {name: "名前3", age: 32}, 5 {name: "名前4", age: 42}, 6 {name: "名前5", age: 52}, 7 {name: "名前6", age: 62} 8]

次のように書いたところ、

javascript

1function(){ 2 array1.map(function(val){ 3 return val.members 4 }) 5}

得られたのは次の配列でした。なんとか、二重になっている配列をフラットにしたいのですが、どうすればよいでしょうか?

javascript

1 [ 2 [{name: "名前1", age: 12}, {name: "名前2", age: 22}], 3 [{name: "名前3", age: 32}], 4 [{name: "名前4", age: 42}, {name: "名前5", age: 52}, {name: "名前6", age: 62}] 5]

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

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

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

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

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

miyabi-sun

2019/05/15 07:23

過去の質問を何故閉じないのですか? そのまんまな回答とかもあるのに
lg_rino

2019/05/15 07:37

前回の多次元配列の質問については、いただいた回答が難しく、少しずつ読んでいるのですが、未だにきちんと理解できないままで…理解できてからお返事及びcloseしようと思っており現状に至ります。申し訳ありません。 そのまんまな回答がある、と教えていただいたものの、読み返しても同じ問題が出ていることがわかりません。お恥ずかしい限りです…。
guest

回答5

0

flatMapを使えばフラットな配列が得られます。

javascript

1array1.flatMap(function(val){ 2 return val.members 3});

投稿2019/05/15 07:00

ku__ra__ge

総合スコア4524

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

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

lg_rino

2019/05/15 07:12

ありがとうございます。知りませんでした。 IEとEdge未対応とのことですが、これらのブラウザに対応する方法はないでしょうか…?
guest

0

ベストアンサー

js

1const array1 = [ 2 {"members": [{name: "名前1", age: 12}, {name: "名前2", age: 22}]}, 3 {"members": [{name: "名前3", age: 32}]}, 4 {"members": [{name: "名前4", age: 42}, {name: "名前5", age: 52}, {name: "名前6", age: 62}]} 5] 6 7const array2 = array1.map(x=>x.members).reduce((acc, x) => acc.concat(x), []); 8 9console.log(array2);
[ { name: '名前1', age: 12 }, { name: '名前2', age: 22 }, { name: '名前3', age: 32 }, { name: '名前4', age: 42 }, { name: '名前5', age: 52 }, { name: '名前6', age: 62 } ]

投稿2019/05/15 07:20

ozwk

総合スコア13521

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

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

0

IE / Edge で flatMap を使いたい場合。

Array​.prototype​.flatMap() Polyfill
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap#Polyfill

This polyfill needs Array.prototype.flat polyfill

Array.prototype.flat polyfill が必要だというので先にそちらも読み込んでおく

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat#Polyfill

投稿2019/05/15 07:40

x_x

総合スコア13749

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

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

0

javascript

1const a = [ 2 {"members": [{name: "名前1", age: 12}, {name: "名前2", age: 22}]}, 3 {"members": [{name: "名前3", age: 32}]}, 4 {"members": [{name: "名前4", age: 42}, {name: "名前5", age: 52}, {name: "名前6", age: 62}]} 5]; 6 7const b=[].concat.call([],...a.map(x=>x.members)); 8console.log(b);

投稿2019/05/15 07:12

yambejp

総合スコア114779

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

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

yambejp

2019/05/15 08:13

IE対応したいならozwkさんの提示しているreduceのコールバックを 古い書き方にもどせば動きますね
guest

0

IE系では未実装ですが、Array​.prototype​.flat()というものがあります。

投稿2019/05/15 07:01

alphase

総合スコア43

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

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

lg_rino

2019/05/15 07:37

ありがとうございます。IE系が使えると助かります。書いておらずにすみません。
alphase

2019/05/15 08:34 編集

なるほど!でしたら、上記リファレンス内にも記載がありますが、以下コードのように書き換えられます。 === var arr1 = [1, 2, [3, 4]]; arr1.flat(); // この処理は下記のコードと同等です arr1.reduce((acc, val) => acc.concat(val), []); // [1, 2, 3, 4] ===
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問