Skip to content

Instantly share code, notes, and snippets.

@QuocCao-dev
Last active June 29, 2023 14:43
Show Gist options
  • Save QuocCao-dev/9c924e1ba3b57652180ccf02ee074fec to your computer and use it in GitHub Desktop.
Save QuocCao-dev/9c924e1ba3b57652180ccf02ee074fec to your computer and use it in GitHub Desktop.

Type Mart

const products = [
  {
    name: "fanny pack",
    price: "30",
    preOrder: "true",
  },
  {
    name: "beanie",
    price: "15",
    preOrder: "false",
  },
  {
    name: "tote bag",
    price: "20",
    preOrder: "false",
  },
  {
    name: "shirt",
    price: "20",
    preOrder: "true",
  },
  {
    name: "hoodie",
    price: "43",
    preOrder: "true",
  },
];

- 1. Tạo type cho `products`
- 2. Tạo biến `productName` để lưu giá trị product cần tìm kiếm
- 3. Tạo biến `shipping` (giá ship khi đưa tới 1 địa điểm)
- 4. Tạo biến `taxPercent` (tax của mỗi product)
- 5. Tạo bién `totalTax` (tổng tax của đơn hàng)
- 6. Tạo biến `total` (tổng giá trị của đơn hàng)
- 7. Tạo biến `shippingAddress` (địa chỉ  đơn hàng sẽ giao điến)
- 8. Tìm trong danh sách `products` sản phẩm  tên trùng với tên `productName`  lưu vào biến `foundProduct`
- 9. Nếu sản phẩm  `preOrder`  true thì log ra câu `We will send you a message when your product ships.`
- 10. Nếu sản phẩm  price lớn hơn 25 thì phí ship  0 , ngược lại phi ship  5
- 11. Nếu địa chỉ cần giao đến  `Ho Chi Minh City` thì taxPercent = 0.1,  những nơi khác sẽ  0.05
- 12. Tính tổng tax  lưu vào biến totalTax
- 13. Tính tổng tiền cần phải thanh toán  lưu vào biến total
- 14. Log ra thông tin 
```js
console.log(`
  Product Name: ${product.name}
  Product Address: ${shippingAddress}
  Product Price: ${product.price}
  Tax: ${taxTotal}
  Shipping: ${shipping}
  Total: ${total}
`);

`

Restaurant Order

const orders = [
  [
    {
      name: "Miso Ramen",
      price: 15.99,
    },
    {
      name: "Gyoza and Rice",
      price: 7.99,
    },
    {
      name: "Sashimi Lunch Set",
      price: 13.99,
    },
  ],
  [
    {
      name: "Chicken and Waffles",
      price: 9.99,
    },
    {
      name: "Buffalo Wings Special",
      price: 8.99,
    },
    {
      name: "Rottiserie Meal Deal",
      price: 11.99,
    },
  ],
  [
    {
      name: "Rigatoni Bolognese",
      price: 24,
    },
    {
      name: "Insalata Di Parma",
      price: 20,
    },
    {
      name: "Lasagna Al Forno",
      price: 22,
    },
  ],
  [
    {
      name: "Turkey Bacon Bagel",
      price: 6.99,
    },
    {
      name: "Lox Cream Cheese Bagel",
      price: 9.99,
    },
    {
      name: "Pastrami Swiss Bagel",
      price: 7.99,
    },
  ],
  [
    {
      name: "Xiao Long Bao",
      price: 14.99,
    },
    {
      name: "Red Bean Buns",
      price: 12.49,
    },
    {
      name: "Kurobuta Pork Shao Mai",
      price: 14.99,
    },
  ],
];


const restaurants = [
  {
    name: "Silver Rice Sushi 🍣",
    priceBracket: PriceBracket.Medium,
    deliveryTimeMinutes: 40,
    openHour: "12",
    closeHour: "23",
    distance: "5",
  },
  {
    name: "Nikko's Rotisserie Chicken 🍗",
    priceBracket: PriceBracket.Low,
    deliveryTimeMinutes: 20,
    openHour: "12",
    closeHour: "21",
    distance: "8",
  },
  {
    name: "Aita Trattoria 🍝",
    priceBracket: PriceBracket.High,
    deliveryTimeMinutes: 60,
    openHour: "18",
    closeHour: "22",
    distance: "1",
  },
  {
    name: "Lula Bagel 🥯",
    priceBracket: PriceBracket.Low,
    deliveryTimeMinutes: 20,
    openHour: "0",
    closeHour: "12",
    distance: "2",
  },
  {
    name: "Golden Chopstick 🥢",
    priceBracket: PriceBracket.Medium,
    deliveryTimeMinutes: 20,
    openHour: "15",
    closeHour: "23",
    distance: "12",
  },
];
enum PriceBracket {
  Low, // $0 - $10
  Medium, // $10 - $20
  High, // $20
}

const restaurants = [
  {
    name: "Silver Rice Sushi 🍣",
    priceBracket: PriceBracket.Medium,
    deliveryTimeMinutes: 40,
    openHour: "12",
    closeHour: "23",
    distance: "5",
  },
  {
    name: "Nikko's Rotisserie Chicken 🍗",
    priceBracket: PriceBracket.Low,
    deliveryTimeMinutes: 20,
    openHour: "12",
    closeHour: "21",
    distance: "8",
  },
  {
    name: "Aita Trattoria 🍝",
    priceBracket: PriceBracket.High,
    deliveryTimeMinutes: 60,
    openHour: "18",
    closeHour: "22",
    distance: "1",
  },
  {
    name: "Lula Bagel 🥯",
    priceBracket: PriceBracket.Low,
    deliveryTimeMinutes: 20,
    openHour: "0",
    closeHour: "12",
    distance: "2",
  },
  {
    name: "Golden Chopstick 🥢",
    priceBracket: PriceBracket.Medium,
    deliveryTimeMinutes: 20,
    openHour: "15",
    closeHour: "23",
    distance: "12",
  },
];

const orders = [
  [
    {
      name: "Miso Ramen",
      price: 15.99,
    },
    {
      name: "Gyoza and Rice",
      price: 7.99,
    },
    {
      name: "Sashimi Lunch Set",
      price: 13.99,
    },
  ],
  [
    {
      name: "Chicken and Waffles",
      price: 9.99,
    },
    {
      name: "Buffalo Wings Special",
      price: 8.99,
    },
    {
      name: "Rottiserie Meal Deal",
      price: 11.99,
    },
  ],
  [
    {
      name: "Rigatoni Bolognese",
      price: 24,
    },
    {
      name: "Insalata Di Parma",
      price: 20,
    },
    {
      name: "Lasagna Al Forno",
      price: 22,
    },
  ],
  [
    {
      name: "Turkey Bacon Bagel",
      price: 6.99,
    },
    {
      name: "Lox Cream Cheese Bagel",
      price: 9.99,
    },
    {
      name: "Pastrami Swiss Bagel",
      price: 7.99,
    },
  ],
  [
    {
      name: "Xiao Long Bao",
      price: 14.99,
    },
    {
      name: "Red Bean Buns",
      price: 12.49,
    },
    {
      name: "Kurobuta Pork Shao Mai",
      price: 14.99,
    },
  ],
];

type Order = {
  name: string;
  price: number;
};

function filterOrder(filterPrice: PriceBracket, price: number) {
  if (filterPrice === PriceBracket.Low) {
    return price < 10;
  }
  if (filterPrice === PriceBracket.Medium) {
    return price > 10 && price < 20;
  }
  if (filterPrice === PriceBracket.High) {
    return price >= 20;
  }
}

function getOrders(filterPrice: PriceBracket) {
  const eligibleOrders: Order[][] = [];

  orders.forEach((order) => {
    const filteredOrders = order.filter(({ price }) =>
      filterOrder(filterPrice, price)
    );
    eligibleOrders.push(filteredOrders);
  });

  restaurants.forEach((restaurant, index) => {
    console.log(`Restaurant name : ${restaurant.name}`);
    const restaurantOrders = eligibleOrders[index];
    if (restaurantOrders.length > 0) {
      restaurantOrders.forEach((order, i) => {
        console.log(`${i + 1} : ${order.name} - ${order.price}$`);
      });
    } else {
      console.log("Not available");
    }
    console.log("====================================");
  });
}

getOrders(PriceBracket.High); // getOrders(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment