有一个更好的方法吗?
我将值存储在某些人会错误地称为关联数组的位置:
该tokens
对象存储....令牌和在每个数据库级别上使用该令牌的文档计数。
var tokens = {'db1' : { '654321': { 'docCount': 1 },
'321456': { 'docCount': 2 } },
'db2' : { '999999': { 'docCount': 1 } } };
我可以添加/删除 dbs 和令牌并适当地更新 docCounts。由于为简洁而省略了代码,我们可以假设,如果一个 db 存在,那么一个令牌也存在,其 docCount 至少为 1。
如果一个数据库存在并且我需要检索它的任何令牌,那么最好的方法是什么?如果 dbs 持有数组,它会像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']); }