下記のような配列があったとします。
JavaScript
1const colors = ['red', 'green', 'yellow', 'blue']; 2const indexStringArray = ['0', '1']
colors配列のindex0とindex1を取り除き、下記のような2つの配列をつくりたいです。
JavaScript
1const oldColors = ['yellow', 'blue'] 2const newColors = ['red', 'green']
1つならspliceでなんとかなりました。
2つになると、spliceで削除しようにもindexがずれてしまいます。
例:
[red,green,yellow,blue]でindex:0のredを消すと
[green,yellow,blue]のindex:1を消してしまい[red,yellow]と[green,blue]になってしまう。
そこで、消したものに応じてindexを増やしたり減らしたりしようかと思いましたが、非常に面倒な実装になりそうでした。
30分ほど考えて思いついたのが、下記です。
TypeScript
1const colors: (undefined | string)[] = ['red', 'green', 'yellow', 'blue']; 2const indexStringArray = ['0', '1']; 3 4// colorsからindexStringArrayを使ってredとgreenを取り出す。 5const newColors = indexStringArray.map((indexString) => colors[parseInt(indexString)]); 6 7// colors[index]をundefinedに置き換える[undefined, undefined, 'yellow', 'blue'] 8indexStringArray.map((numStr) => (colors[parseInt(numStr)] = undefined)); 9 10// filter(Boolean)でundefinedを削除する。残ったのが['yellow', 'blue'] 11const oldColors = colors.filter(Boolean);
これで一応解決している(?)のですが、もっとスマートな回答がありませんでしょうか。
なんだか回りくどい解決をしているような気がします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/20 08:52