JavaScriptのデータ構造について1つ学びがあったのでメモします。
まずは例をご覧ください。
ユニークではない数値の登場回数を調べる
最初に書いたコードがこちら。
var count = 0;
var flags = [];
for(var i = 0; i < data.length; i += 1) {
flags.push(false);
}
for(var i = 0; i < data.length; i += 1) {
if(flags[data[i]]) {
count += 1;
} else {
flags[data[i]] = true;
}
}
console.log(count);
フラグの配列を使用しています。
まず最初にfalseで埋めます。そして、登場した番号にはtrueを割り当てます。
最終的に、ユニークでない数値が何回登場したのかを出力しています。
これを改変したのが次のコード。
var count = 0;
var flags = {};
for(var i = 0; i < data.length; i += 1) {
if(flags[data[i]]) {
count += 1;
} else {
flags[data[i]] = true;
}
}
console.log(count);
}
改良後のコードは3行短くなっています。
そうです、最初にfalseで埋める作業をスキップしたのです。
なんでこんなことができるかというと、オブジェクトを利用しているからなんですね。
例えば、3番目のフラグを用意する時。
配列ならば、1番目と2番目の要素をまずは埋めなくてはいけません。ただし、1番目と2番目が必要かどうかは不明です。
それがオブジェクトならば、{ '3' : false }とすればいいのです。1番目と2番目は必要になってから定義すればいいのです。
得られた知見
今までは配列をベースのコードを書いてきたのですが、オブジェクトもけっこう便利ですね(何を今さらって感じですが)
特に、順序立てが重要ではない場合は、積極的にオブジェクトを使っていくべきかもしれません。