JavaScript で Array と Object がネストしたデータを展開したかった
以下のような Object
が保持してる配列をいい感じに展開したかった。
元データ
const obj = [ { name: "name1", children: [ { name: "name2" }, { name: "name3", children: [ { name: "name4" }, { name: "name5" }, ] }, ], }, { name: "name6" } ]
結果
[ { name: "name1", children[...] }, { name: "name2" }, { name: "name3", children[...] }, { name: "name4" }, { name: "name5" }, { name: "name6" }, ]
やってみた
function flattenBy(ary, key){ return ary.concat(ary.map(data => flattenBy(data[key] || [], key)).reduce((r, v) => r.concat(v), [])); } const obj = [ { name: "name1", children: [ { name: "name2" }, { name: "name3", children: [ { name: "name4" }, { name: "name5" }, ] }, ], }, { name: "name6" } ] console.log(flattenBy(obj, "children")); /* output: [ { name: 'name1', children: [ [Object], [Object] ] }, { name: 'name6' }, { name: 'name2' }, { name: 'name3', children: [ [Object], [Object] ] }, { name: 'name4' }, { name: 'name5' } ] */
結果の順番は特に指定はないのでこれでいいかなー。
標準に flatten
がほしい