1) for문 사용
let products;
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 productsICanEat = [];
for (let i = 0; i < products.length; i+=1) {
let hasMushrooms = false;
if (products[i].containsNuts === false) {
for (let j = 0; j < products[i].ingredients.length; j+=1) {
if (products[i].ingredients[j] === "mushrooms") {
hasMushrooms = true;
}
}
if (!hasMushrooms) productsICanEat.push(products[i]);
}
}
productsICanEat.length // 1
2) Array method filter 사용
let products;
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 productsICanEat = products.filter(function(cur){
return cur.containsNuts === false && !cur.ingredients.includes("mushrooms");
})
productsICanEat.length; // 1
1) for문 사용
let products;
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) {
ingredientCount[products[i].ingredients[j]] = (ingredientCount[products[i].ingredients[j]] || 0) + 1;
}
}
ingredientCount['mushrooms']; // 2
ingredientCount; // {artichoke: 1, sundried tomatoes: 2, mushrooms: 2, roma: 1, goats cheese: 1, …}
2) Array method map, reduce 사용
let products;
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 = products.map(function(elem) {
return elem.ingredients
}).reduce(function(acc, cur) {
return acc.concat(cur);
}).reduce(function(acc, cur) {
acc[cur] = (acc[cur] || 0) + 1
return acc;
},{});
ingredientCount['mushrooms']; // 2
ingredientCount; // {artichoke: 1, sundried tomatoes: 2, mushrooms: 2, roma: 1, goats cheese: 1, …}
일단 map으로 ingredients value만 뽑아서 배열로 만들어준 후,
reduce 안에서 caoncat 사용으로 각 배열의 ingredients value를 뽑아 하나의 배열로 만들어 주었고
그 후에 한번더 reduce를 사용해 카운트를 해주었다.