Показать сообщение отдельно
  #28 (permalink)  
Старый 20.12.2019, 23:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

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;) {
 document.write(`Очередь: ${JSON.stringify(presentNameParty, "", 1)}<br>`);
 document.write(`Список гостей за столом: ${JSON.stringify(result, "", 1)}<br>`);
 document.write(`Текущий гость: ${current}<br>`);
 /* номер гостя в очереди, если никого не найдём в его друзьях,
    возьмём первого из тех кто остался в очереди*/
 let index = 0;
 /* ищем друзей у текущего гостя */
 let friends = arr.find(obj => obj.name == current).close;
  document.write(`Друзья ${current}: ${JSON.stringify(friends, "", 1)}<br>`);
 /* кто из друзей стоит в очереди? */
 friends = friends.filter(name => presentNameParty.includes(name));
  document.write(`Кто из друзей ${current} в очереди ${JSON.stringify(presentNameParty, "", 1)}, осталось: ${JSON.stringify(friends, "", 1)}<br>`);
 /* если друзья в очереди, выбираем по алфавиту первого, сортировка */
 if(friends.length){
        current = friends.sort()[0];
        /* смотрим где стоит выбранный гость */
        index = presentNameParty.findIndex(name => name == current);
 }

 /* выводим гостя из очереди и сажаем за стол */
        current = presentNameParty.splice(index,1)[0]
        result.push(current)
  document.write(`Выбрали ${current} <br>`);
 /* рассаживаем остальных гостей */
 }
 /* возвращаем список гостей за столом */
        return result
 /* не нравится список, верните массив обьектов
        return result.map(name => arr.find(obj => obj.name == name)
 */
 }

let list = placeGuests(arr)
document.write(`Список гостей за столом: ${JSON.stringify(list, "", 1)}<br>`);

    </script>

Последний раз редактировалось рони, 20.12.2019 в 23:53.
Ответить с цитированием