【发布时间】:2014-06-02 07:04:07
【问题描述】:
我正在学习 Meteor/Javascript,但有一个我似乎无法解决的问题。这更像是一个两部分的问题。
我可以用 Meteor Mongo 做我想做的事情并避免在 Javascript 中映射/减少吗?
如何在 Javascript 中对下面提到的 2D 数组进行映射/缩减? (将是一个很好的学习示例)。
这是设置,我有一个 Mongo 集合,其中包含以下数据;
{
"_id" : "oBPoZCLo9JFhZGdtL",
"guest" : "Jin",
"itemLikes" : 25,
}
{
"guest" : "Jin",
"itemLikes" : 32,
"_id" : "xz7AgJv52e8QF6XuA"
}
{
"guest" : "Jin",
"itemLikes" : 20,
"_id" : "XHkJoJEDyxX8w9Zmc"
}
{
"guest" : "Jin",
"itemLikes" : 39,
"_id" : "LeN5Nqhgdn79MCbct"
}
{
"guest" : "Jim",
"itemLikes" : 17,
"_id" : "iuhM6v4yySrEpgeaY"
}
{
"guest" : "Lex",
"itemLikes" : 20,
"_id" : "ed6dmDMzXKJRaBxFM"
}
{
"guest" : "Lex",
"itemLikes" : 35,
"_id" : "dTiY7nEx9yNXQTp49"
}
{
"guest" : "Mel",
"itemLikes" : 21,
"_id" : "XRb7Yz84nEDJhpSQh"
}
{
"guest" : "Mel",
"itemLikes" : 17,
"_id" : "KX9TSsWrJREQtaSNu"
}
{
"guest" : "Nance",
"itemLikes" : 39,
"_id" : "rJRr2WdBaWXEurbWf"
}
这是我用来解析数据的 Meteor 方法调用;
myFunctionName: function () {
var guestLikesTotal = []
_.reduce(_.map(MyCollection.find().fetch(), function(doc) {
//map
return [doc.guest, doc.itemLikes];
//the map gives me ["Jin", 25] for example
}),
function(memo, num){
//reduce
if (guestLikesTotal.length == 0) {
guestLikesTotal.push(num);
} else {
var count = guestLikesTotal.length;
for(var i=0;i<count;i++) {
if(guestLikesTotal[i][0] == num[0]) {
guestLikesTotal[i][1] += num[1];
} else {
// not sure what to put here
}
}
// this is wrong because its pushing items with the same "name" into the array
guestLikesTotal.push(num);
};
return memo+=1;
}, 0);
return guestLikesTotal;
}
我正在尝试让 guestLikesTotal 看起来像这样;
[["Jin",116],["Jim",17],["Lex",55],["Nance",56]]
对于这 2 个问题的任何帮助将不胜感激。
【问题讨论】:
标签: javascript arrays mongodb meteor underscore.js