[JavaScript] Cheat Sheet for Competitive Programming [AtCoder]

完全に自分用のチートシートです。
これを読み通せばB問題は解けるくらいの内容にしたいです。
随時更新予定

#コード
##標準入出力

```javascript:Standard
function Main(input) {
   input = input.split("\n");
   var N = input[0];
   var line = input[1].split(" ");
}

Main(require("fs").readFileSync("/dev/stdin", "utf8"));
```

Main関数の中にプログラムを記述する。
inputを入力用の引数とする。

inputに入れたものをsplit("\n")で行毎に配列にする。
次に一行目を変数Nに、
二行目をsplit(" ")でスペース毎に分割して、配列lineとして格納。

7行目はおまじないで大丈夫

paiza形式では以下風になる

<details><summary>◇開く◇</summary><div>

```javascript:Standard_paiza
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = []
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});

reader.on('line', (line) => {
  lines.push(line);
});

reader.on('close', () => {
  var N = lines[0];
  for(var i = 0; i < N; i++) {
    var line = lines[i+1].split(" ");
  }
});
```
</div></details>
徐長なのであまり使いたくないですね

##型変換
###文字列から数値　また　数値から文字列

```javascript:StringToNumber
var s = '1';
console.log("s は "+typeof s);

s = parseInt(s);
console.log("s は "+typeof s);

s = s.toString();
console.log("s は "+typeof s);

/* 
s は string
s は number
s は string
*/
```

####文字列から数値(配列)

```javascript:ArrayStringToNumber
var p = ['5','2','9','6'];
console.log(p);

p = p.map(p => parseInt(p,10));
console.log(p);

/*
[ '5', '2', '9', '6' ]
[ 5, 2, 9, 6 ]
*/
```

参考元 : [JavaScript で文字列の配列を数値の配列にしたい@scalewallet](https://qiita.com/scalewallet/items/6c55daa509d6162dcd50)

##配列の並び替え
###アルファベット順

```javascript:アルファベット順
var str = ['d', 'a', 'b', 'c'];
str.sort();
 
console.log(str);

/*
[ 'a', 'b', 'c', 'd' ]
*/

```

###アルファベット順　または　その逆順(アロー関数)

```javascript:アルファベット順　または　その逆順
var str = ['d', 'a', 'b', 'c'];

str.sort((a, b) => {return a>b;});
console.log(str);

str.sort((a, b) => {return a<b;});
console.log(str);

/*
[ 'a', 'b', 'c', 'd' ]
[ 'd', 'c', 'b', 'a' ]
*/
```

###数値の並べ替え

```javascript:数値の並べ替え
var number = [3, 7, 1, 5];

number.sort((a, b) => {return a-b;});
console.log(number);

number.sort((a, b) => {return b-a;});
console.log(number);

/*
[ 1, 3, 5, 7 ]
[ 7, 5, 3, 1 ]
*/
```

####オブジェクトの並べ替え

```javascript:
var lists = [
  {str: 'a', num: 3},
  {str: 'b', num: 2},
  {str: 'c', num: 4},
  {str: 'd', num: 1}
];

lists.sort((a,b) => { return (a.str > b.str)? 1 : -1; });

console.log(lists)

lists.sort((a,b) => { return (a.num > b.num)? 1 : -1; });

console.log(lists);

/*
[ { str: 'a', num: 3 },
  { str: 'b', num: 2 },
  { str: 'c', num: 4 },
  { str: 'd', num: 1 } ]
[ { str: 'd', num: 1 },
  { str: 'b', num: 2 },
  { str: 'a', num: 3 },
  { str: 'c', num: 4 } ]
*/
```

これを使った問題
[AtCoder Beginner Contest 128 B - Guidebook](https://atcoder.jp/contests/abc128/tasks/abc128_b)
<details><summary>解答</summary><div>

```javascript:AnswerExample
function Main(input) {
 
	input = input.split("\n");
	var N = parseInt(input[0]);
	var lists = [];
	
	function List(name,score,num){
	    this.name = name;
	    this.score = score;
	    this.num = num;
	}
        //コンストラクタ　Listの定義
	
	List.prototype.show = function(){
	    return this.num;
	}
        //prototypeプロパティによりコンストラクタListにメソッドshowを生成
        //showの内容はListのnumを返す
	
	for(var i = 0;i < N;i++){
	     pass = input[i+1].split(" ");
	     lists[i] = new List(pass[0],parseInt(pass[1]),parseInt(i+1));
	}
	
	lists.sort((a,b) => { return (a.name > b.name) ? 1
    				   : (a.name < b.name) ? -1
      				   : (b.score >= a.score)? 1 : -1; });
        //ソートの安定性について@masha_uさんに指摘＆助言いただきました
        //ありがとうございます

    for(var j = 0;j < N;j++){
        console.log(lists[j].show());
    }
    //console.log(lists);
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));
```

[@masha_u](https://twitter.com/masha_u)さん
</div></details>

###配列メソッド

####先頭の要素を切り取って、返す shift()

```javascript:shift
var number = [3, 7, 1, 5];

var extract = number.shift();
    
console.log(extract);
console.log(number);

/*
3
[ 7, 1, 5 ]
*/
```

####最後の要素を切り取って、返す pop()

```javascript:pop	
var number = [3, 7, 1, 5];

var extract = number.shift();
    
console.log(extract);
console.log(number);

/*
5
[ 3, 7, 1, ]
*/
```

####要素の追加 push()

```javascript:push	
var number = [3, 7, 1, 5];

var extract = number.push(9);
console.log(number);

/*
[ 3, 7, 1, 5, 9 ]
*/
```