Marson,
попытка номер ...
<script>
let arr = [
{ name: 'Ali', close: ['Vasil', 'Wog'] },
{ name: 'San', close: ['Vasil', 'Zena'] },
{ name: 'Vasil', close: ['San', 'Ali'] },
{ name: 'Wog', close: ['Zena', 'Ali'] },
{ name: 'Zena', close: ['San', 'Wog'] }
];
function placeGuests(arr) {
/* очередь, отсортированный список гостей, те кто реально пришёл на встречу */
let presentNameParty = arr.map(obj => obj.name).sort();
/* будущий результат, массив, первый гость из тех кто пришёл */
let result = presentNameParty.splice(0,1);
/* текущий (последний) гость посаженный за стол, имя гостя */
let current = result[0];
/* цикл по рассадке гостей, рассаживаем очередь гостей, пока есть кого рассаживать */
for (;presentNameParty.length;) {
/* номер гостя в очереди, если никого не найдём в его друзьях,
возьмём первого из тех кто остался в очереди*/
let index = 0;
/* ищем друзей у текущего гостя */
let friends = arr.find(obj => obj.name == current).close;
/* кто из друзей стоит в очереди? */
friends = friends.filter(name => presentNameParty.includes(name));
/* если друзья в очереди, выбираем по алфавиту первого, сортировка */
if(friends.length){
current = friends.sort()[0];
/* смотрим где стоит выбранный гость */
index = presentNameParty.findIndex(name => name == current);
}
/* выводим гостя из очереди и сажаем за стол */
current = presentNameParty.splice(index,1)[0]
result.push(current)
/* рассаживаем остальных гостей */
}
/* возвращаем список гостей за столом */
return result
/* не нравится список, верните массив обьектов
return result.map(name => arr.find(obj => obj.name == name)
*/
}
let list = placeGuests(arr)
document.write(list)
</script>