これを行うより良い方法はありますか?
一部の人が誤って関連付けられた配列と呼ぶものに値を格納しています。
オブジェクトには、tokens
トークンと、データベースごとのレベルでそのトークンを使用するドキュメントの数が格納されます。
var tokens = {'db1' : { '654321': { 'docCount': 1 },
'321456': { 'docCount': 2 } },
'db2' : { '999999': { 'docCount': 1 } } };
データベースとトークンを追加/削除し、docCounts を適切に更新できます。簡潔にするためにコードが省略されているため、データベースが存在する場合、少なくとも 1 の docCount を持つトークンも存在すると想定できます。
データベースが存在し、そのトークンのいずれかを取得する必要がある場合、最良の方法は何ですか? データベースが配列を保持していれば、tokens['db1'][0]
...と同じくらい簡単ですが、私は配列を使用していません。
私はLINQに「触発された」次のようなものを持っています(LINQを責めないでください):
// NOTE: default not implemented here
var firstOrDefault = function(obj) {
var thing;
for (var i in obj) {
thing = i;
break;
}
return thing;
};
これは次のように呼び出されます(たとえば簡略化されています):
var anyToken;
if (tokens['db1') { anyToken = firstOrDefault(tokens['db1']); }
通常、上記の例 '654321' に従って返されます (これは配列ではなくオブジェクトであるため、順序は保証されませんが、私のコードではどちらの値も受け入れられます)。
- これは値を取得するための合理的な方法ですか?
- より良い方法はありますか?
- それを吸い上げて、すべてをアレイに押し込み、ストレージ機能をそのようにラップする必要がありますか?
更新: 参照を削除しましdefault
た。見つからないアイテムは完全に受け入れられるundefined
応答になるためです。
// NOTE: obj.hasOwnProperty not implemented for brevity
var firstOrAny = function(obj) {
var thing;
for (var i in obj) {
thing = i;
break;
}
return thing;
};
これは次のように呼び出されます(たとえば簡略化されています):
var anyToken;
if (tokens['db1') { anyToken = firstOrAny(tokens['db1']); }