Используете ли вы таблицу перекрестных ссылок в БД, чтобы отслеживать, кто с кем дружит? Я думаю, что это хороший способ решить эту проблему, если вы этого не сделаете, и тогда вам нужно будет только запросить эту таблицу, чтобы найти друзей.
...because there types of friends...
Значит ли это, что есть разные типы друзей?
Упрощенно, у вас может быть таблица с тремя столбцами: person_id , friend_id , friend_type (если это было необходимо). Person_id и friend_id являются ссылками на один и тот же тип идентификатора. Когда два человека становятся друзьями, вы добавляете их идентификаторы в таблицу и указываете, какие они друзья.
Если вы действительно хотите сделать это на стороне клиента, я думаю, что localStorage может быть чем-то интересным, но может поддерживаться не всеми браузерами. localStorage может занимать около 10 МБ (если я не ошибаюсь) памяти. Загружайте список друзей, когда пользователь заходит на сайт в первый раз. Я бы, наверное, пошел на сеанс на стороне сервера, но это только мое мнение.