Custom sort
Takes a list of shopping items from various people and display the most frequently purchased items
by Amy L
HTML
<p>What my friends bought:
<ul id="friends">
</ul>
</p>
<p>The most frequently purchased items are as follows:</p>
<ol id="output"></ol>
JavaScript
var itemData = [ 'apple', 'banana', 'carrot', 'egg', 'fries'];
var purchaseData = {
adam: [1, 2, 3],
bob: [4, 1],
carey: [1, 3, 4, 0],
doug: [1, 3, 0],
me: [4]
};
var friendsData = {
'me': ['adam', 'bob', 'carey', 'doug']
};
function getFriendsListForUser(user) {
return friendsData[user];
}
function getPurchasesForUser(user) {
return purchaseData[user];
}
function printItems(items) {
var output = '';
for (var i = 0; i < items.length; i++) {
var item = items[i];
output += '<li>' + itemData[item.id] + ' x' + item.count + '</li>';
}
return output;
}
function getPopular(user) {
function _sortByFreq(items) {
return items.sort(function(a, b) {
return a.count < b.count;
});
}
function _getAllFriendsItems(user) {
var allItems = [];
var friends = getFriendsListForUser(user);
for (var i = 0; i < friends.length; i++) {
var items = getPurchasesForUser(friends[i]);
allItems = allItems.concat(items);
}
return allItems;
}
function _consolidateItems(items) {
var _itemMap = {};
var consolidated = [];
function _increment(item) {
_itemMap[item] = _itemMap[item] + 1;
}
function _notInList(item) {
return _itemMap[item] === undefined;
}
function _addToList(item) {
_itemMap[item] = 0;
}
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (_notInList(item)) {
_addToList(item);
}
_increment(item);
}
for (var item in _itemMap) {
if (_itemMap.hasOwnProperty(item)) {
consolidated.push({
id: item,
count: _itemMap[item]
});
}
}
return consolidated;
}
var allItems = _getAllFriendsItems(user);
...