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);
  ...