JavaScirpt
配列
オブジェクト
データ構造

配列よりもオブジェクトを使うべき時があると知る

More than 3 years have passed since last update.

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番目は必要になってから定義すればいいのです。


得られた知見

今までは配列をベースのコードを書いてきたのですが、オブジェクトもけっこう便利ですね(何を今さらって感じですが)

特に、順序立てが重要ではない場合は、積極的にオブジェクトを使っていくべきかもしれません。