質問: str.split(/■|▲/); console.log(arr); // [ 'あああ', 'いいい', 'ううう', 'えええ', 'おおお' ] //// 何らかの処理... ////////////// 期待する配列 ///////////////// console.log(arr); // ['あああ', '■', 'いいい', '▲', 'ううう', '■', 'えええ', '▲', 'おおお']; ``` もし実装が可能な方いらっしゃったらご教授、助言などいただけると幸いです。 また現状(1)のコードのアドバイス等も頂けると幸いです。よろしくお願いします。
回答: > > 以下の解放を作りました > > > これ動かしたら`(5) ["あああ", "■", "ううう", "■", "おおお"]`になって、 `いいい`と`えええ`の文字列が剥げるやん。 新しく空の配列を1個用意して、交互にpushしていくというやり方にしないと駄目だよ。 もうLhankor_Mhyさんとredshogaさんの回答には勝てないので 質問文のコードの考え方を元に無理やり改造して解いてみたよ。 これは中々に死ねるけど、中々綺麗なコードになったかも。 ``` const str = 'あああ■いいい▲ううう■えええ▲おおお'; // 対象の文字を配列にしてreduceでくくる // アロー関数使ってなかったのでES5でコードを書いた ['■', '▲'].reduce(function (strs, splitString) { var results = []; strs.forEach(function (str) { str.split(splitString).forEach(function(it, i){ if (i !== 0) results.push(splitString); results.push(it); }); }); return results; }, [str]); // (9) ["あああ", "■", "いいい", "▲", "ううう", "■", "えええ", "▲", "おおお"] ``` こんな感じでreduceの開始を`[str]`にするのが拘りポイント、 後は一時的に二次元配列を作って、一次元配列に固め直すというやり方で解決できる。