Practical2: Shopping Cart and calculation of averages
Mean, Median, and Mode
First we need some arrays of numbers on which to test our code.
var numbers1 = [1,2,3,4,5,6,7,8,9]; var numbers2 = [1,2,3,2,3,2,5,6,6,4,3,1,5,4,3]; var numbers3 = [1,2,3,1,2,3]; var mynumbers = [3,78,5,23,1,9,7,5];
Code
function mean(numberlist){ let sum = 0; for (i=0 ; i<numberlist.length; i++) sum += numberlist[i]; return sum/numberlist.length; }
Test code
var numbers1 = [1,2,3,4,5,6,7,8,9]; var numbers2 = [1,2,3,2,3,2,5,6,6,4,3,1,5,4,3]; var numbers3 = [1,2,3,1,2,3]; var mynumbers = [3,78,5,23,1,9,7,5];
Results
The mean of numbers1 is 5.000 The mean of numbers2 is 3.333 The mean of numbers3 is 2.000 The mean of mynumbers is 16.375
Code
function median(numberlist){ var sortedList = numberlist.sort((a,b) => a-b); var index = numberlist.length / 2; if (Number.isInteger(index)) return (sortedList[index] + sortedList[index-1])/2; else return sortedList[Math.floor(index)]; }
Test code
var numbers1 = [1,2,3,4,5,6,7,8,9]; var numbers2 = [1,2,3,2,3,2,5,6,6,4,3,1,5,4,3]; var numbers3 = [1,2,3,1,2,3]; var mynumbers = [3,78,5,23,1,9,7,5];
Results
The mean of numbers1 is 5.000 The mean of numbers2 is 3.000 The mean of numbers3 is 2.000 The mean of mynumbers is 6.000
Code
// Mode solution produced after class // As result can be bimodal or multi-modal, // the returned result is provided as an array // mode of [3, 5, 4, 4, 1, 1, 2, 3] = [1, 3, 4]. function mode(numberlist) { let modes = []; let count = []; let number = 0; let maxIndex = 0; for (let i = 0; i < numberlist.length; i++) { number = numberlist[i]; count[number] = (count[number] || 0) + 1; if (count[number] > maxIndex) { maxIndex = count[number]; } } // For - in statement. // Push the number(s) with the highest appearance frequency // into modes array. for (let i in count) { if (count[i] === maxIndex) { modes.push(Number(i)); } } return modes; }
Test code
var numbers1 = [1,2,3,4,5,6,7,8,9]; var numbers2 = [1,2,3,2,3,2,5,6,6,4,3,1,5,4,3]; var numbers3 = [1,2,3,1,2,3]; var mynumbers = [3,78,5,23,1,9,7,5];
Results
The mode of numbers1 is 1,2,3,4,5,6,7,8,9 The mode of numbers2 is 3 The mode of numbers3 is 1,2,3 The mode of mynumbers is 5
Shopping cart
To calcuate total prices and possible discounts, we first need to create some (fictional) shopping carts:
var cart1 = [ {name: 'apples', price: 1.20, quantity: 1, type: "food"}, {name: 'oranges', price: 1.05, quantity: 2, type: "food"}, {name: 'pens', price: 0.5, quantity: 3, type: "stationary"}, {name: 'A5 notebook', price: 1.50, quantity: 2, type: "stationary"} ]
var cart2 = [ {name: 'pears', price: 1.00, quantity: 2, type: "food"}, {name: 'salmon', price: 2.65, quantity: 1, type: "food"}, {name: 'thumb drive', price: 21.95, quantity: 1, type: "computing"}, {name: 'bucket', price: 1.50, quantity: 2, type: "home"}, {name: 'easter egg', price: 2.45, quantity: 3, type: "food"} ]
let shoppingCart = [ { name:"loaf of bread", type:"food", quantity:1, price:.85 }, { name:"multipack beans", type:"food", quantity:2, price:1 }, { name:"mushrooms", type:"food", quantity:10, price:.1 }, { name:"can of beer", type:"alcohol", quantity:4, price:1.1 }, { name:"prosecco", type:"alcohol", quantity:1, price:8.99 }, { name:"steak", type:"food", quantity:2, price:3.99 }, { name:"blue cheese", type:"food", quantity:1, price:2.99 }, { name:"candles", type:"home", quantity:3, price:1.99 }, { name:"cheesecake", type:"food", quantity:1, price:4.99 }, { name:"onions", type:"food", quantity:3, price:.4 }, ];
Functions
Simple function to calculate the total cost of a shopping cart
function cartPrice(cart) { let totalPrice = 0; for (i=0 ; i<cart.length ; i++) { currentItem = cart[i]; totalPrice += currentItem.price * currentItem.quantity; } return totalPrice; }
Pendantic function to calculate the total cost of a shopping cost. Also applies a 30% discount to food items
function shoppingTotal(cart) { let totalPrice = 0; for (let i=0 ; i<cart.length ; i++) { let itemPrice = cart[i].price; if (cart[i].type === 'food') { itemPrice = .8 * itemPrice; } let itemQuantity = cart[i].quantity; let itemTotalPrice = itemPrice * itemQuantity; totalPrice = totalPrice + itemTotalPrice; } return totalPrice.toFixed(2); }
More sophisticated function that takes a discount amount and the type of product to apply the discount to as arguments.
function shoppingTotalBetter(cart, discountAmount, type) { let totalPrice = 0; for (let i=0 ; i<cart.length ; i++) { let itemPrice = cart[i].price; if (cart[i].type === type) { itemPrice = (100 - discountAmount)/ 100 * itemPrice; } let itemQuantity = cart[i].quantity; let itemTotalPrice = itemPrice * itemQuantity; totalPrice = totalPrice + itemTotalPrice; } return totalPrice.toFixed(2); }
Finally a function to filter the cart based on price (with a random name). The variable quantity specifies whether the quantity of the item in the shopping basket should be taken into account in this calculation.
function ted(cart,lowPrice, highPrice, quantity){ let arrItems = []; for (let i=0 ; i<cart.length; i++){ if (quantity === true) { itemPrice = cart[i].price * cart[i].quantity; } else { itemPrice = cart[i].price; } if (itemPrice >= lowPrice && itemPrice <= highPrice){ arrItems.push(cart[i]); } } return arrItems; }
Test Code
console.log('cart1 costs £'+cartPrice(cart1).toFixed(2)); console.log('cart2 costs £'+cartPrice(cart2).toFixed(2)); console.log('the combined cart costs £'+cartPrice(cart1.concat(cart2)).toFixed(2)); console.log('shoppingCart costs £'+cartPrice(shoppingCart).toFixed(2)); console.log('shoppingCart costs £'+shoppingTotal(shoppingCart)); console.log('shoppingCart with 20% discount on food costs £'+shoppingTotalBetter(shoppingCart, 20,'food')); console.log('shoppingCart with 20% discount on home costs £'+shoppingTotalBetter(shoppingCart, 20,'home')); console.log('shoppingCart with 1% discount on alcohol costs £'+shoppingTotalBetter(shoppingCart, 1,'alcohol')); console.log('shoppingCart with 10% discount on home costs £'+shoppingTotalBetter(shoppingCart, 10,'food')); console.log(ted(shoppingCart,2,5,true)); console.log(ted(shoppingCart,2,5,false));
Results
cart1 costs £7.80 cart2 costs £36.95 the combined cart costs £44.75 shoppingCart costs £40.37 shoppingCart costs £36.17 shoppingCart with 20% discount on food costs £36.17 shoppingCart with 20% discount on home costs £39.18 shoppingCart with 1% discount on alcohol costs £40.24 shoppingCart with 10% discount on home costs £38.27