LoginSignup
32
24

More than 3 years have passed since last update.

javascriptの標準入力

Last updated at Posted at 2020-08-16

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()メソッドとは

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]に更新される。

32
24
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
24