Javascript Meteor cursor.map():明白了,如何多次提取一个元素?
如何使用流星收集的地图功能 使用教程,我们有一个名为Posts的集合 find()返回一个游标,让我遍历所有 Posts.find().fetch()将为我提供一个包含所有帖子的数组,但这可能包含大量数据 假设我只需要一个数组中的一个post元素,如标题:我可以这样做:Javascript Meteor cursor.map():明白了,如何多次提取一个元素?,javascript,meteor,cursor,Javascript,Meteor,Cursor,如何使用流星收集的地图功能 使用教程,我们有一个名为Posts的集合 find()返回一个游标,让我遍历所有 Posts.find().fetch()将为我提供一个包含所有帖子的数组,但这可能包含大量数据 假设我只需要一个数组中的一个post元素,如标题:我可以这样做: titles=Posts.find().map(function(a) {return a.title}); // works 假设我想要标题和所有者ID。 我正在调试此程序,并执行了以下操作: a=Posts.find()
titles=Posts.find().map(function(a) {return a.title}); // works
假设我想要标题和所有者ID。
我正在调试此程序,并执行了以下操作:
a=Posts.find()
titles=a.map((function(a) {return a.title;}); // works
ownerIds=a.map((function(a) {return a.ownerId;}); //doesn't work, cursor already iterated over, returns empty array.
这是行不通的。为什么?答案:
它不起作用的原因是游标只能迭代一次。也就是说,游标不能用于同一数组
(其他人可能已经知道了这一点,但我花了半个小时进行了徒劳的调试,直到我找到答案。)通过调用光标,可以多次使用光标。从文档中: forEach、map或fetch方法只能在游标上调用一次。要多次访问光标中的数据,请使用“倒带”重置光标 因此,这应该是可行的:
a=Posts.find()
titles=a.map((function(a) {return a.title;});
a.rewind();
ownerIds=a.map((function(a) {return a.ownerId;});
您也可以像这样返回一个对象'titles=a.map((函数(a){return{title:a.title,ownerId:a.ownerId}});谢谢@david,GBU