考虑数据
{
"Groceries": [
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "85.14",
"debit": true
},
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "19.15",
"debit": true
},
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "4.2",
"debit": true
},
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "16.08",
"debit": true
},
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "28.48",
"debit": true
},
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "35.82",
"debit": true
},
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "12.15",
"debit": true
},
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "4.19",
"debit": true
},
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "34.11",
"debit": true
},
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "3.36",
"debit": true
},
{
"category": {
"uri": "/categories/20fe3330-80e1-4908-9f57-5b7ef575b197",
"parent": "Food & Drink",
"name": "Groceries"
},
"amount": "11.32",
"debit": true
}
],
"Restaurants": [
{
"category": {
"uri": "/categories/15147702-8227-4ee8-8b05-d2e8d532bd0a",
"parent": "Food & Drink",
"name": "Restaurants"
},
"amount": "18.43",
"debit": true
}
]
}
我希望这些数据类似于
{
"Groceries": 1234.12, # (1234.12 is madeup value for now)added values for all Groceries transaction
"Restaurents": 18.42
}
我正在使用Lodash来执行此操作,我的代码看起来像
var mapped = _.reduce(data, function(result, num, key){
var sum = 0.0;
sum = _.reduce(num, function(sum, n){
console.log(key + ':' + parseFloat(n.amount));
return sum + parseFloat(n.amount);
});
result[key] = sum;
return result;
}, {})
我得到的结果是
"{
"Groceries": "[object Object]19.154.216.0828.4835.8212.154.1934.113.3611.32",
"Restaurants": {
"category": {
"uri": "/categories/15147702-8227-4ee8-8b05-d2e8d532bd0a",
"parent": "Food & Drink",
"name": "Restaurants"
},
"amount": "18.43",
"debit": true
}
}"
我在这里做错了什么?
答案 0 :(得分:4)
来自docs:
将集合减少为一个值,该值是通过回调运行集合中每个元素的累积结果,其中每个连续的回调执行都会消耗先前执行的返回值。如果未传递累加器,则集合的第一个元素将用作初始累加器值
所以你要么提供一个初始值,要么解析sum
,因为它是一个String
对象,我建议给出一个初始值,因为每次过去解析它都没有意义。第一
所以你可以这样做:
var s = _.reduce(num, function(sum, n){
return sum + parseFloat(n.amount);
}, 0);
答案 1 :(得分:0)
var restaurants = {
"Restaurants": [
{
"category": {
"name": "Restaurants"
},
"amount": "88.91"
},
{
"category": {
"name": "Restaurants"
},
"amount": "58.14"
}]};
var groceries = {
"Groceries": [
{
"category": {
"name": "Groceries"
},
"amount": "58.41"
},
{
"category": {
"name": "Groceries"
},
"amount": "85.14"
}]};
function reduce_category(collection) {
return _.reduce(collection, function (memo, entry) {
return memo += parseFloat(entry.amount, 10);
}, 0);
}
console.log((function reduce_collection(collection) {
var sum = _.reduce(collection, function (memo, entry) {
return memo += reduce_category(entry[_.first(_.keys(entry))]);
}, 0);
return (Math.round(sum * 100) / 100).toFixed(2);
}([restaurants, groceries]))) // => 290.60