JavaScript でオブジェクトのキー/プロパティの数を効率的にカウントする 質問する

JavaScript でオブジェクトのキー/プロパティの数を効率的にカウントする 質問する

この質問は、JavaScript でオブジェクトのキー/プロパティの数を効率的にカウントするにはどうすればよいですか?

もう1つ知りたいことがあります。「定数時間「オブジェクト内のキーの数を決定する方法は何ですか? ブラウザ上のほとんどのオブジェクトはそれほど大きくないので、大きな懸念は生じません。そのため、私は主に Node.JS でこれを行うことに関心があります。

編集:Object.keys(obj).lengthGoogle Chrome と Node.JS では、 は線形時間 O(n) で返されるようです(つまり、 内のキーの数に依存しますobj)。より優れた O(1) 方法はありますか?

Node.JSでいくつかテストしてみました(ソースは下記)

var tests = [10e3, 10e4, 10e5, 10e6]
for(j in tests) {
    var obj = {};
    for(i = 0; i < tests[j]; i++)
        obj[i] = i;
    console.time('test' + tests[j]);
    Object.keys(obj).length;
    console.timeEnd('test' + tests[j]);
}

n = 10e3、10e4、10e5、10e6... の場合、結果は次のようになります。

test10000: 5ms
test100000: 20ms
test1000000: 371ms
test10000000: 4009ms

ベストアンサー1

少し調べてみたところ、JavaScript オブジェクト内のキーの数を定数時間で判別する方法は、少なくとも Node では、今のところありません。Node は内部的にこの情報を追跡していますが、ECMA-262 5th にはこれを行う方法がないため、公開されません。

Harmony (ECMA バージョン 6) は Maps と Sets をネイティブにサポートする可能性があることに注意してください。これらの仕様がどうなるかはわかりません。

この件を TC39 委員会に提起する必要があると言われています。

V8 のバグレポート:http://code.google.com/p/v8/issues/detail?id=1800

おすすめ記事