Marson,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<h1>исходный массив</h1>
<pre>const arr = [
{ name: 'Ali', close: ['Vasil', 'Wog'] },
{ name: 'San', close: ['Vasil', 'Zena'] },
{ name: 'Vasil', close: ['San', 'Ali'] },
{ name: 'Wog', close: ['Zena', 'Ali'] },
{ name: 'Zena', close: ['Sun', 'Wog'] }
];</pre>
<h1>желаемый результат</h1><pre>
[
{ name: 'Ali', close: ['Vasil', 'Wog'] },
{ name: 'Vasil', close: ['San', 'Ali'] },
{ name: 'San', close: ['Vasil', 'Zena'] },
{ name: 'Zena', close: ['Sun', 'Wog'] },
{ name: 'Wog', close: ['Zena', 'Ali'] }
]</pre>
<h1>результат работы скрипта, новый массив</h1>
<script>
const arr = [
{ name: 'Ali', close: ['Vasil', 'Wog'] },
{ name: 'San', close: ['Vasil', 'Zena'] },
{ name: 'Vasil', close: ['San', 'Ali'] },
{ name: 'Wog', close: ['Zena', 'Ali'] },
{ name: 'Zena', close: ['Sun', 'Wog'] }
];
function placeGuests(arr) {
const collator = new Intl.Collator(["en", "ru"], {numeric: true});//создали сортировщик
let comparator = (a, b) => collator.compare(a, b);//создали функцию сортировки
let [curent, ...list] = arr.map(({name}) => name).sort(comparator);//получили список имён по алфавиту ["Ali", "San", "Vasil", "Wog", "Zena"]
const setName = new Set(list); // ["San", "Vasil", "Wog", "Zena"] список имён для списка посадки
list = [curent];//['Ali'] список посадки
for(;setName.size;) { // пока список имён не пуст
let {close} = arr.find(({name}) => name == curent);// нашли друзей Ali ['Vasil', 'Wog']
curent = close.find( name => setName.has(name)); // нашли 'Vasil'
if(!curent) [curent, ..._] = setName; //если в списке друзей нет подходящего, берём первого из списка имён
list.push(curent);//добавили друга в список посадки
setName.delete(curent)//удалили друга из списка имён
};
//создали список посадки list ["Ali", "Vasil", "San", "Zena", "Wog"]
comparator = (a, b) => collator.compare(list.indexOf(a.name), list.indexOf(b.name));//создали функцию сортировки согласно местам посадки
return arr.slice().map(({name, close}) => ({name, close : [...close]})).sort(comparator); //отсортировали исходный массив, согласно списка посадки
}
document.write(`<pre>${JSON.stringify(placeGuests(arr), "", 0)}</pre>`)
</script>
<h1>найдите разницу, ниже состояние исходного массива после обработки скриптом</h1>
<script>
document.write(`<pre>${JSON.stringify(arr, "", 0)}</pre>`)
</script>
</body>
</html>