Skip to content

Instantly share code, notes, and snippets.

@mashingan
Created January 6, 2015 07:34
Show Gist options
  • Save mashingan/a882d5da96a30246ef3f to your computer and use it in GitHub Desktop.
Save mashingan/a882d5da96a30246ef3f to your computer and use it in GitHub Desktop.
function makecola(name, calories, color, sold) {
name = name || "Water";
calories = calories || 0;
color = color || "clear";
sold = sold || 0;
return {
name: name,
calories: calories,
color: color,
sold: sold
};
}
var products = [
makecola("Grapefruit", 170, "red", 8200),
makecola("Orange", 160, "orange", 12101),
makecola("Cola", 210, "caramel", 25412),
makecola("Diet Cola", 0, "caramel", 43922),
makecola("Lemon", 200, "green", 14983),
makecola("Raspberry", 180, "pink", 9427),
makecola("Root Beer", 200, "caramel", 9909),
makecola(false, false, false, 62123)
];
function printProducts() {
var labels = (arguments.length === 0) ? ["name"] : arguments;
for(var i=0; i<products.length; i++) {
var product = products[i];
var info = "";
for(var j=0; j<labels.length; j++) {
var label = labels[j];
info += label + ": " + product[label] + " ";
}
console.log(info);
}
}
function compareLabel(colaA, colaB, test, label) {
if(test(colaA[label], colaB[label]))
return 1;
else
return -1;
}
function makeCompareFunction(label) {
return function(colaA, colaB) {
return compareLabel(colaA, colaB, function(a, b) { return a < b; },
label);
};
}
/*
function compareSold(colaA, colaB) {
return compareLabel(colaA, colaB, function(a, b) { return a < b; },
"sold");
}
function compareName(colaA, colaB) {
return compareLabel(colaA, colaB, function(a, b) { return a < b; },
"name");
}
function compareCalories(colaA, colaB) {
return compareLabel(colaA, colaB, function(a, b) { return a < b; },
"calories");
}
function compareColor(colaA, colaB) {
return compareLabel(colaA, colaB, function(a, b) { return a < b; },
"color");
}
*/
var compareSold = makeCompareFunction("sold");
printProducts("name");
console.log("\nAfter sorting sold:");
products.sort(compareSold);
printProducts("name", "sold");
//printProducts();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment