javascriptで標準入力からデータを受け取る
・標準入力からデータを受け取る
例)「hello」というデータが渡される
process.stdin.resume();process.stdin.setEncoding('utf8');varlines=[];;//標準入力から受け取ったデータを格納する配列varreader=require('readline').createInterface({ //readlineという機能を用いて標準入力からデータを受け取るinput:process.stdin,output:process.stdout});reader.on('line',(lines)=>{ //line変数には標準入力から渡された一行のデータが格納されているlines.push(lines); //ここで、lines配列に、標準入力から渡されたデータが入る});reader.on('close',()=>{ //受け取ったデータを用いて処理を行うconsole.log(lines) //helloが出力される}
受け取ったデータの処理
●整数化する
例)「1」が標準入力から与えられている場合
(...)reader.on('close',()=>{ //受け取ったデータを用いて処理を行うvarn=parseInt(lines[0]);//「1」を整数として処理できるようになる}
●データをコンマで分解する
例)「1,2」「3,4」というデータが与えられた場合
(...)reader.on('close',()=>{ //受け取ったデータを用いて処理を行うvarArr1=lines[0].split(',')//Arr1配列に「1」「2」が格納されるvarnum_Arr1=Arr1.map(function(str){returnNumber(str);//num_Arr1配列内に、Arr1配列を整数化したものを格納});varArr2=lines[1].split(',') //Arr2配列に「3」「4」が格納されるvarnum_Arr2=Arr2.map(function(str){//num_Arr2配列内に、Arr2配列を整数化したものを格納returnNumber(str);)});}
map() メソッドは、与えられた関数を配列のすべての要素に対して呼び出し、その結果からなる新しい配列を生成します
●応用編
※Teratailで質問した際にいただいた回答をQiitaでまとめています
https://teratail.com/questions/256288
(...)reader.on('close',()=>{lines.map(e=>e.split(',')).flat().map(e=>+e);})
・上記のコードで行っていること
①「e」(elementの略)という仮配列に、「1,2」「3,4」をコンマで分割した値をいれる。
※e配列の中身:[[1 2][3 4]]
②.flat()メソッドを用いて配列の深さを揃える
※e配列の中身:[1 2 3 4]
③mapメソッドを用いて、e配列に整数化したe配列を代入する
単項算術演算子 (+、-、++、--) はすべて、必要に応じてオペランドを数値に変換するという特性がある為、「(e => +e);」という処理で整数化を行える。
↓
mapメソッドによって以上の処理をした中身がlines配列に代入される。
lines配列の中身は
[1 2 3 4]に更新される。