我遇到了一个我无法解决的问题......所以这就是我想要做的。
给定以下对象数组,
products = [
{ name: 'Sonoma', ingredients: ['artichoke', 'sundried tomatoes', 'mushrooms'], containsNuts: false },
{ name: 'Pizza Primavera', ingredients: ['roma', 'sundried tomatoes', 'goats cheese', 'rosemary'], containsNuts: false },
{ name: 'South Of The Border', ingredients: ['black beans', 'jalapenos', 'mushrooms'], containsNuts: false },
{ name: 'Blue Moon', ingredients: ['blue cheese', 'garlic', 'walnuts'], containsNuts: true },
{ name: 'Taste Of Athens', ingredients: ['spinach', 'kalamata olives', 'sesame seeds'], containsNuts: true },
];
我知道我可以通过嵌套循环运行它以按成分名称添加键,然后在我循环遍历计数时增加值,如下所示:
let ingredientCount = {};
for (i = 0; i < products.length; i += 1) {
for (j = 0; j < products[i].ingredients.length; j += 1) { //loop ingredients
ingredientCount[products[i].ingredients[j]] = (ingredientCount[products[i].ingredients[j]] || 0) + 1;
}
}
因此, ingredientCount 应该是这样的:{ "artichoke": 1 "mushrooms": 2 } ***
这里的问题是我需要使用 map 和 reduce 来创建与上面相同的结果。
let ingredientCount = {}
ingredientCount =
products.filter ((value) => {
// filter out arrays within ingredients
// so out come should be like
/*
[ingredients: ['artichoke', 'sundried tomatoes', 'mushrooms']
,ingredients: ['roma', 'sundried tomatoes', 'goats cheese', 'rosemary']
,ingredients: ['black beans', 'jalapenos', 'mushrooms']
,ingredients: ['blue cheese', 'garlic', 'walnuts']
,ingredients: ['spinach', 'kalamata olives', 'sesame seeds']
*/
}).map ((value) => {
/* then take out ingredients and map this array to
arthichoke: ['artichoke','artichoke','artichoke']
sundried tomatoes: ['sundried tomatoes']
etc...
*/
})
无论如何,我可以使用上面的数组方法来获得完全相同的结果而不必使用循环吗?
提前致谢。
慕妹3146593
ibeautiful
当年话下
qq_遁去的一_1
慕的地10843
相关分类