2016-05-10 11 views
1

Javascript Mapでワンステップで要素を見つけたり追加したりすることは可能ですか?Javascript ES6 Mapの要素を取得または設定しますか?

私は1つのステップ(キーの右の場所のために二回見て回避するため)で次の操作を実行したいと思います:代わりに、私は一度だけのキーを検索したい

// get the value if the key exists, set a default value otherwise 
let aValue = aMap.get(aKey) 
if(aValue == null) { 
    aMap.set(aKey, aDefaultValue) 
} 

。 C++では

、1コードは次のようになりますJavaScriptでstd::map::insert()std::map::lower_bound()

使用することができます。

let iterator = aMap.getPosition(aKey) 
let aValue = aMap.getValue(iterator) 
if(aValue == null) 
{ 
    aMap.setWithHint(aKey, aValue, iterator) 
} 

または

let aValue = aMap.getOrSet(aKey, aDefaultValue) 

を私はそれが不可能であると仮定しますが、私は正しいことを確認したい。また、私はそれが重要な特徴である間になぜ不可能であるかを知ることに興味があります。

+0

コード例で 'aKey'を2回検索する必要があることを正しく理解していますか? – nils

+0

はい、これは問題です。 –

+1

一般的に、これらの種類のマクロ最適化はJavaScriptで心配する必要はありません。現代のJavaScriptエンジンはそれらを処理する上で非常にうまく機能します。また、私が知る限り、マップを使用してこれを防ぐ方法はありません。 – nils

答えて

2

ルックアップはとにかく起こります。少なくともエンジンが最適化されるまで、それを避けてもそれほど重要ではありません。

しかし、Map.hasはより良いソリューションで、Map.get()より少し速いはずです。たとえば:あなたはGoogleの規模でない限り

myMap.has(myKey) ? true : myMap.set(myKey, myValue)

パフォーマンスがこのレベルに無関係でなければなりません。しかし、それが深刻なボトルネックであるならば、Arrayは将来的にMap/Setよりも速いはずです。

関連する問題