我不知道如何实现函数reduce

时间:2017-04-27 23:02:22

标签: javascript json mongodb mapreduce

我不知道如何实现reduce功能。 我从地图输出了一份文件...... 例如两个文件 键“_id”:“AD” “值”     {             “numtweets”:1,             “hastags”:{                     “OPINIÓ”:1,                     “debat”:1,                     “不存在”:1,                     “tampoc”:1,                     “promet”:1,                     “gaire”:1,                     “diàleg”:1             }     } 和其他

{
        "numtweets" : 1,
        "hastags" : {
                "other" : 1,
                "debat" : 1,
                "inexistent" : 1,
                "another" : 1,
        }
}

我需要一个减少所有总和的函数,以便

"numtweets" : 2,
"dicwords" : {
        "OPINIÓ" : 1,
        "debat" : 2,
        "inexistent" : 2,
        "tampoc" : 1,
        "promet" : 1,
        "gaire" : 1,
        "diàleg" : 1,
        "other" : 1,
        "another" : 1
},
"lisuser" : {
        "user2" : 1
}

如果我的json值只是nuwtweets,则reduce是

function(key, values) { 
  return Array.sum(values); 
};

如果mi json值只是hastags(没有numtweets和lisuser),则reduce函数是

var r = function(key, values) { 
  result = {}
  values.forEach(function(val) {
    for (hashtag in val) {
      if (hashtag in result) {
        result[hashtag] = result[hashtag] + val[hashtag] 
      } else {
        result[hashtag] = val[hashtag] 
      }
    } 
  });
  return(result)
};

但我不知道如何混合2减少功能。 我的mongodb和JavaScript水平非常低。 感谢

1 个答案:

答案 0 :(得分:0)

试试这个:

  let data = values.reduce((finalObj, ele) => {
  finalObj.numtweets += ele.numtweets
  for (key in ele.hastags) {
    if(ele.hastags.hasOwnProperty(key)) {
      if(finalObj.hastags[key])
        finalObj.hastags[key] += ele.hastags[key]
      else
        finalObj.hastags[key] = ele.hastags[key]
    }
  }
  return finalObj
})
console.log(data)

其中value是要减少为一个对象的对象的数组