koans - Advanced ( AboutApplyingWhatWeHaveLearnt.js )

마데슾 : My Dev Space·2019년 10월 21일
0

[CODESTATES]PRE

목록 보기
12/19

견과류나 버섯이 들어가있지 않은 피자 찾는 문제

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를 사용해 카운트를 해주었다.

profile
👩🏻‍💻 🚀

0개의 댓글