##javascriptで標準入力からデータを受け取る
・標準入力からデータを受け取る
例)「hello」というデータが渡される
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = []; ; //標準入力から受け取ったデータを格納する配列
var reader = 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', () => { //受け取ったデータを用いて処理を行う
var n = parseInt(lines[0]); //「1」を整数として処理できるようになる
}
●データをコンマで分解する
例)「1,2」「3,4」というデータが与えられた場合
(...)
reader.on('close', () => { //受け取ったデータを用いて処理を行う
var Arr1 = lines[0].split(',') //Arr1配列に「1」「2」が格納される
var num_Arr1 = Arr1.map(function(str){
return Number(str); //num_Arr1配列内に、Arr1配列を整数化したものを格納
});
var Arr2 = lines[1].split(',') //Arr2配列に「3」「4」が格納される
var num_Arr2 = Arr2.map(function(str){ //num_Arr2配列内に、Arr2配列を整数化したものを格納
return Number(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]に更新される。