considering
var desserts = [ { name: 'Chocolate Cake', ingredients: ['cocoa', 'flour', 'sugar', 'eggs', 'milk', 'butter' ], type: 'cake' }, { name: 'Snickerdoodles', ingredients: ['flour', 'milk', 'butter', 'eggs', 'sugar', 'cinnamon', 'cream of tartar'], type: 'cookie' }, { name: 'Strawberry-Rhubarb Pie', ingredients: ['flour', 'water', 'eggs', 'sugar', 'strawberries', 'rhubarb'], type: 'pie' }, { name: 'Lemonade', ingredients: ['water', 'sugar', 'lemons'], type: 'drink' }, { name: 'Chocolate Chip Cookies', ingredients: ['flour', 'butter', 'sugar', 'eggs', 'chocolate chips'], type: 'cookie' }, { name: 'Apple Pie', ingredients: ['flour', 'water', 'cinnamon', 'apples', 'sugar'], type: 'pie' }, { name: 'Apple Pie', ingredients: ['flour', 'water', 'cinnamon', 'apples', 'sugar'], type: 'pie' }, { name: 'Angel Food Cake', ingredients: ['flour', 'eggs', 'sugar', 'cream of tartar'], type: 'cake' } ];
I am trying to use underscore reduce to output and object that counts how many of each type there are
{'pie' : 3, 'cake' : 2}...
Here is what I have so far
var dessertCategories = function (desserts) { return _.reduce(desserts, function(memo, dessert) { var type1 = dessert.type; if (memo[type1] === undefined) { memo[type1] = 1; } else { memo[type1]++; } return memo; }, {}); };
I believe I am using reduce incorrectly here or it may be my logic. I am trying to follow the template from underscore.
Advertisement
Answer
Your issue, I think, is that you are not calling the dessertCategories
function you’ve made anywhere.
The below gets you there. If you’d like to have dessertCategories
be the map of categories->counts then remove the outer function(){...}
wrapper.
var desserts = [ { name: 'Chocolate Cake', ingredients: ['cocoa', 'flour', 'sugar', 'eggs', 'milk', 'butter' ], type: 'cake' }, { name: 'Snickerdoodles', ingredients: ['flour', 'milk', 'butter', 'eggs', 'sugar', 'cinnamon', 'cream of tartar'], type: 'cookie' }, { name: 'Strawberry-Rhubarb Pie', ingredients: ['flour', 'water', 'eggs', 'sugar', 'strawberries', 'rhubarb'], type: 'pie' }, { name: 'Lemonade', ingredients: ['water', 'sugar', 'lemons'], type: 'drink' }, { name: 'Chocolate Chip Cookies', ingredients: ['flour', 'butter', 'sugar', 'eggs', 'chocolate chips'], type: 'cookie' }, { name: 'Apple Pie', ingredients: ['flour', 'water', 'cinnamon', 'apples', 'sugar'], type: 'pie' }, { name: 'Apple Pie', ingredients: ['flour', 'water', 'cinnamon', 'apples', 'sugar'], type: 'pie' }, { name: 'Angel Food Cake', ingredients: ['flour', 'eggs', 'sugar', 'cream of tartar'], type: 'cake' } ]; // Mock underscore implementation, ignore it. var _ = {reduce: (arr, fn, init) => Array.prototype.reduce.call(arr, fn, init)} var dessertCategories = function (desserts) { return _.reduce(desserts, function(memo, dessert) { var type1 = dessert.type; if (memo[type1] === undefined) { memo[type1] = 1; } else { memo[type1]++; } return memo; }, {}); }; // Actually calling the function you've created. console.info(dessertCategories(desserts));