多重配列のフラット化([ 'a', [ 'b', [ 'c', 'd' ], 'e' ], 'f' ] => [ 'a', 'b', 'c', 'd', 'e', 'f' ])ではなく、
多重配列を、指定したセルの箇所だけ展開させたいです。どうすればいいですか?
具体的には、
Start

//元のテーブル
[
  ['1','b','c',['d1','d2'],['e1','e2']],
  ['2','b',['c1','c2'],['d1','d2'],'e'],
  ['3',['b1','b2'],'c',['d1','d2'],'e'],
  ['4',['b1','b2','b3','b4'],'c','d','e']
]
//セルの指定
[ false, true, false, true ] //例えば2つ目と4つ目のセル(この例だとbのセルとdのセル)だけ展開する指定

Goal

//展開後のテーブル
[
  ['1','b','c','d1',['e1','e2']],
  ['1','b','c','d2',['e1','e2']],
  ['2','b',['c1','c2'],'d1','e'],
  ['2','b',['c1','c2'],'d2','e'],
  ['3','b1','c','d1','e'],
  ['3','b1','c','d2','e'],
  ['3','b2','c','d1','e'],
  ['3','b2','c','d2','e'],
  ['4','b1','c','d','e'],
  ['4','b2','c','d','e'],
  ['4','b3','c','d','e'],
  ['4','b4','c','d','e']
]

みたいな感じです。
Arrayのメソッドチェーンの途中で使いたいのでreduce等のコールバック関数にしたいです。
↓うまくいかなかったやつ(というか何をやっているのかわからなくなってきたやつ)の中で一番ゴールに近かったやつ

var expand = function(targets) {
  return function(newTable, oldRow) {
    //
    return newTable.concat(targets.reduce(function(rows, target, i) {
      return target ? rows.concat(rows.reduce(function(newRows, row) {
        return [].concat(row[ i ]).map(function(cell) {
          var newRow = row.slice()
          newRow[ i ] = cell
          return newRow
        })
      }, [])) : rows
    }, [ oldRow.slice() ]))
    //
  }
}
var result = [
  ['1','b','c',['d1','d2'],['e1','e2']],
  ['2','b',['c1','c2'],['d1','d2'],'e'],
  ['3',['b1','b2'],'c',['d1','d2'],'e'],
  ['4',['b1','b2','b3','b4'],'c','d','e']
].reduce(expand([ false, true, false, true ]), [])
console.log(result)