【发布时间】:2012-10-28 05:19:01
【问题描述】:
我正在尝试使用 node.js 构建一个多维数组,使用 redis 作为数据源。但是我做得不对。
menuKey 包含包含 redis 中排序集的键,排序集包含引用其他键的值。例如:
menu:main:sections contains ["menu:main:section1","menu:main:section2"]
menu:main:section1 contains ["option1", "option2"]
menu:main:section2 contains ["option1"]
我正在尝试构建的数组:
[["option1", "option2"], ["option1"]]
这是我拥有的代码,但我以某种方式错误地放置了回调?
function handleMenu(jsonrpc) {
var params = jsonrpc['params'];
var result = [];
var sections = [];
menuKey = 'menu:' + params['menu'] + ':sections';
async.series([
function (callback) {
redis.zrevrange(menuKey, 0, -1, function(err, sections) {
async.forEachSeries(sections, function(section, sectionCallback) {
redis.zrevrange(section, 0, -1, function(err, items) {
result.push(items);
sectionCallback();
});
}, callback);
});
}
], function() {
console.log(result);
});
}
我看不出我做错了什么,请指教。
【问题讨论】:
-
也许你需要的是一个对象而不是一个数组,而且语法看起来不对...
["menu:main:section1": ["option1", "option2"]?? -
我非常肯定我需要一个多维数组。是的,语法可能是错误的,我是这个 node.js 的新手。我试图让数组 [0] [0] = 'a',数组 [0][1] = 'b',数组 [1][0] = 'c'。如果你明白我的意思。
-
如果你的索引是一个字符串,你需要一个对象。如果您的索引是隐式整数,则需要一个数组。
{ "prop1" : [ index0, index1 ], "prop2" : [ index0 ] }(在此格式中,属性名称周围的引号是可选的) -
好吧,我想要的是一个多维数组,所以我可能需要使用一个 int 索引。我使用 zrevrange 的原因是我希望“部分”在排序的 redis 集中按“排名”的顺序排列,并且这些“部分”应该包含“项目”,这些“项目”也是对哈希的引用,也按排名顺序。我想返回每个部分中的部分和项目的顺序。稍后我将在调用中检索哈希值。
-
一个多维数组看起来像
array = [ [ index0, index1 ], [ index ] ]。如果你想以某种方式映射"menu:main:section1" -> 0和"menu:main:section2" -> 1,那就去吧。但是如果你想说array["menu:main:section1"][0] = "a";,那么你在外面使用一个对象,一个数组作为属性的值。对象还支持基于 int 的属性名称,但在包括 V8 在内的大多数引擎中都会遭受少量字符串转换 (0 -> "0") 损失。
标签: javascript node.js redis