Node.jsで配列を非同期的にソートする
配列を非同期的にソートするにはasync
モジュールのasync.sortBy
関数を使用します。
この関数は配列の要素を配列の要素から算出された値の昇順にソートします。
なお、ソート処理の実行中にエラーが発生した場合にはそれ以降のソート処理の実行は行われません。
async.sortBy関数
var async = require('async');
async.sortBy(['xxx', 'yyy', 'zzz'], function (item, callback) {
callback(null, 'aaa');
//or
callback(new Error('bbb'), null);
}, function (err, array) {
});
第1引数
第1引数に配列を指定します。あるいは、配列以外のイテラブルを指定することもできます。
イテラブルとは?
ECMAScript 6でイテラブルという新しい概念が導入されました。 イテラブルとは 一般的にイテラブルとは1つずつ要素を取得することができるもののことであり、ECMAScriptではSymbol
第2引数
第2引数に配列の要素からソートに使用される値を算出する処理を関数として指定します。
この関数の第1引数は配列の要素の値であり、第2引数はコールバック関数です。
処理が完了した場合や処理の実行中にエラーが発生した場合には必ずこのコールバック関数を呼び出さなければなりません。
このコールバック関数の第1引数にはエラーオブジェクト(エラーが発生しなかった場合にはnull
)を指定し、第2引数にはソートに使用される値(エラーが発生した場合にはnull
)を指定します。
第3引数
第3引数に配列のソートが完了したか、ソート処理の実行中にエラーが発生した場合に呼び出されるコールバック関数を指定します。
この関数の第1引数はエラーオブジェクトであり、第2引数はソート後の配列です。
この引数は指定しなくても構いません。
サンプルコード1
数値を昇順と降順にソートする例です。
async-sort-by.js
var async = require('async');
var util = require('util');
var xs = [7, 9, 6, 3, 4, 0, 5, 2, 1, 8];
async.sortBy(xs, function (item, callback) {
setTimeout(function () {
util.log(item);
callback(null, item);
}, Math.random() * 1000);
}, function (err, results) {
if (err) {
console.error(err);
process.exit(1);
}
else {
console.log(results);
async.sortBy(xs, function (item, callback) {
setTimeout(function () {
util.log(item);
callback(null, -item);
}, Math.random() * 1000);
}, function (err, results) {
if (err) {
console.error(err);
process.exit(1);
}
else {
console.log(results);
}
});
}
});
使用パッケージ
- Async.js
npm install async
でインストールします。
実行結果
C:\work\node>node async-sort-by.js
6 Jun 12:19:46 - 7
6 Jun 12:19:46 - 4
6 Jun 12:19:47 - 2
6 Jun 12:19:47 - 8
6 Jun 12:19:47 - 1
6 Jun 12:19:47 - 0
6 Jun 12:19:47 - 3
6 Jun 12:19:47 - 9
6 Jun 12:19:47 - 5
6 Jun 12:19:47 - 6
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
6 Jun 12:19:47 - 9
6 Jun 12:19:47 - 7
6 Jun 12:19:47 - 5
6 Jun 12:19:48 - 2
6 Jun 12:19:48 - 0
6 Jun 12:19:48 - 4
6 Jun 12:19:48 - 8
6 Jun 12:19:48 - 1
6 Jun 12:19:48 - 3
6 Jun 12:19:48 - 6
[ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ]
関連

スポンサーリンク