Mapオブジェクトのソート(JavaScript ES2015)
const map = new Map();
map.set('takahashi', {sex: 'male', age: 39});
map.set('yamada', {sex: 'female', age: 22});
map.set('tanaka', {sex: 'female', age: 51});
const sortedArray = Array.from(map).sort((person1, person2) =>{
return person1[1].age - person2[1].age;
});
console.log(sortedArray);
// Array.from(map)でMapの各アイテムを要素とした2次元配列が返却される。
timeコマンド
コマンドの実行にかかった時間を測定することができる。time node hoge.js
real 0m0.067s
user 0m0.054s
sys 0m0.011s
real:実際の時間
user:realのうち、今の実行ユーザーとしてかかった時間
sys:システムが別なことに使った時間
プログラムの処理にかかった時間=userの時間と思えばいい。
JavaScriptのライブラリ
JavaScriptの標準オブジェクトとNode.jsのライブラリは知っておいて損はない。
以下の2つのサイトは目を通しておくと良い。
- ・JavaScriptの標準オブジェクト https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects
- ・Node.jsのライブラリ
https://nodejs.org/dist/latest-v12.x/docs/api/
npmのrequestライブラリ
// HTTPリクエストを簡単に送ることができる。
npm install requestでインストール。
const request = require('request');
request('http://www.goole.com', (error, response, body) =>{
console.log(body);
});
npmパッケージの作り方
新規作成したディレクトリ内でnpm -y init
を実行しpackage.jsonを生成。
index.jsに関数を定義し、module.exports = {名前: 関数};
で公開する。
使用する際は、npm install ../sum
のようにローカルディレクトリを指定してインストールする。
※npm install sum
だとnpmjs.comに登録されたsumがインストールされてしまうので注意
アンインストールはnpm uninstall sum
mkdir sum
cd sum
npm -y init
function add(x, y) {
return x + y;
}
module.exports = {
add: add
}
// 自作したsumライブラリを使う
const sum = require('sum');
console.log(sum.add(3, 6));
同期I/Oと非同期I/O
Node.jsはマルチプロセスやマルチスレッドではなく、シングルスレッドで非同期I/Oを実行する。
デフォルトでは非同期I/Oだが、Syncがついた同期I/O用の関数も用意されている。
const fs = require('fs');
for (let i = 0; i < 3; i++) {
fs.appendFile('./hoge2.csv', 'あ', 'utf8', ()=>{});
fs.appendFile('./hoge2.csv', 'い', 'utf8', ()=>{});
fs.appendFile('./hoge2.csv', 'う', 'utf8', ()=>{});
}
// 非同期I/Oのため「あいう」の順番にはならない
const fs = require('fs');
for (let i = 0; i < 3; i++) {
fs.appendFileSync('./hoge2.csv', 'あ', 'utf8', ()=>{});
fs.appendFileSync('./hoge2.csv', 'い', 'utf8', ()=>{});
fs.appendFileSync('./hoge2.csv', 'う', 'utf8', ()=>{});
}
// 同期I/Oのため「あいう」の順番が保証される
MapオブジェクトをJSON形式でファイルに保存(JavaScript ES2015)
const fs = require('fs');
const map2 = new Map();
map2.set('name', '佐藤');
map2.set('age', 55);
map2.set('sex', 1);
fs.writeFileSync('hoge.json', JSON.stringify(Array.from(map2)), 'utf8');
// [ [ 'name', '佐藤' ], [ 'age', 55 ], [ 'sex', 1 ] ]
※ハッシュではなく通常配列なので、nameやageも値となる
読み込み処理
try {
const data = fs.readFileSync('./hoge.json', 'utf8');
const map3 = new Map(JSON.parse(data));
console.log(map3);
} catch (e) {
console.log(e);
}
// Mapのコンストラクタには[["キー名", 値], ["キー名", 値]]の2次元配列を渡すことができる
HTTPモジュールでWEBサーバを作成
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/plain; charset=utf-8'
});
res.write('あなたのユーザーエージェント:' + req.headers['user-agent']);
res.end();
});
const port = 8000;
server.listen(port, () => {
console.log('listening...')
});
コメント