57814

[code]

    const data = {
        list: [
            {
                item: [1 ,2]
            },
            {
                item: [3 ,4]
            },
             {
                item: [5 ,6]
            }
        ]
    }
    
[/code]

このような json データから１次元配列

[code]

    [ 1, 2, 3, 4, 5, 6 ]
    
[/code]

を得たいのですが、どのように記述するのがよいでしょうか。  
出来るだけループを使用したくないのですが、それは難しいでしょうか。

ちなみに

[code]

    const array = data.list.map(function(a) {return a.item})
    
[/code]

とした場合は、以下のように入れ子の配列になってしまいました。

[code]

    [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ]
    
[/code]


CC BY-SA 4.0
2019-09-03T11:27:10.473
57809
2019-09-03T12:58:28.537
2019-09-03T11:38:22.437
3925
3925
question
javascript json
入れ子になった json から１次元配列を生成する


英語版Stackoverflowに配列をflattanする方法についての回答で`Array.prototype.concat`が使われておりました。

[code]

    const array = data.list.map(function(a) {return a.item})
    Array.prototype.concat.apply([], array)
    
[/code]

でいかがでしょうか？

また、まだECMAScriptの標準にはなっていませんが`flat`という関数を使って

[code]

    array.flat(1);
    
[/code]

という書き方もできるようです。

<https://stackoverflow.com/a/10865042/1536527>


CC BY-SA 4.0
2019-09-03T12:43:17.577
57812
2019-09-03T12:43:17.577
3271
57809
answer


もし `flatMap` が使える環境ならば、`flatMap` を使うとシンプルに記述できます。

[code]

    const array = data.list.flatMap(function(a) {return a.item});
    
[/code]

`flat` が使えるならば、ネストした配列をフラットにすることもできます。

[code]

    const array = data.list.map(function(a) {return a.item}).flat()
    
[/code]

また `reduce` と `concat` を使って記述することも可能です。

[code]

    const array = data.list.reduce((acc, x) => acc.concat(x.item), [])
    
[/code]

  * 参考 
    * <https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap>
    * <https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/flat>


CC BY-SA 4.0
2019-09-03T12:58:28.537
57814
2019-09-03T12:58:28.537
32959
57809
answer