【问题标题】:Meteor/Mongo Map/Reduce 2D ArrayMeteor/Mongo Map/Reduce 2D 数组
【发布时间】: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


    【解决方案1】:

    如果您的集合在数组中,您可以在 javascript 中执行此操作:

    var arr2 = [];
    data.reduce( function (a, current, index) {
      if (!arr2.hasOwnProperty(current.guest)) {
        arr2[current.guest] = 0;
      }
      arr2[current.guest] += current.itemLikes;
    }, data[0]);
    
    var desired_arr = [];
    for(var i in arr2) {
      desired_arr.push([i, arr2[i]]);
    }
    console.log(desired_arr);
    

    完整的小提琴:http://jsfiddle.net/juvian/LDBsT/

    【讨论】:

    • @user2209090 如果解决了您的问题,您可以将其标记为答案;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2021-05-21
    相关资源
    最近更新 更多