使えなかった
- とある案件を引き継ぎ、Express.jsで書かれたサーバーサイドを書いていた。
- CSV的にカンマで区切られた数値列をスペース区切りに変更したかったので、
const nums = '0.0,10.0,20.0,30.0,40.0,50.0,60.0'
// こんな感じの文字列を
// 0.0 10.0 20.0 30.0 40.0 50.0 60.0
// ↑こんな感じのスペース区切りにしたい
// ということで
const nums_space = nums.replaceAll(',', ' ')
// こんな感じで処理したい
-
こんな感じのことをした
-
すると
nums.replaceAll(...) is not function
みたいな感じで怒られた
Node.jsのバージョンが古かった
-
調べてみると単純な話、Node.jsのバージョンが古くて
String
型にreplaceAll
が実装されていないということだった -
replaceAll
は比較的新しいES2015で追加された関数で、自分が使っていたNode.jsはv14.17.0
だったので古すぎ!!ということだった。 -
Node.jsのバージョンが古いのは、引き継ぎ案件だったのもあってで、継ぎ足し継ぎ足しの秘伝のタレ的コードなので、その辺バージョンあげると逆に他のところが動かなくなる、という事情だったりした
-
もしバージョンが関係なければ、nodebrewとか使っているなら
$ nodebrew use v16.x.0
- とか適当に新しいものに切り替えればいいと思う
String.replace()での置き換え
- とまぁNode.jsのバージョンをとにかく変更できなかったので、以下の方法で代替した
const nums = '0.0,10.0,20.0,30.0,40.0,50.0,60.0'
const nums_space = nums.replace(/,/g, ' ')
-
replace()
は昔から実装されているので、使える - 「すべて」をヒットされる
g
をつけて、第一引数に正規表現を与えると、目的のスペース区切りの数値列が手に入った
参考
- Node.jsの各バージョンで対応しているES2015の記述方法はここにまとめられているので、もし困ったらここをみると良い