Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 23.12.2019, 07:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Malleys,
но нет проверки "если друзей нет, берём следующего из основного массива"
var persons = [
	{ name: 'Ali', close: ['Arno'] },
	{ name: 'San', close: ['Vasil', 'Zena'] },
	{ name: 'Vasil', close: ['San', 'Ali'] },
	{ name: 'Wog', close: ['Zena', 'Ali'] },
	{ name: 'Zena', close: ['Sun', 'Wog'] }
];

function placeGuests(guests) {
	const placedGuests = []
	const next = guest => Array.from(guest.close).sort()
		.map(name => guests.find(guest => guest.name === name))
		.find(person => person && !placedGuests.includes(person))
	for(let guest = guests[0]; guest != null; guest = next(guest)) {
		placedGuests.push(guest)
	}
	return placedGuests
}

console.log(placeGuests(persons));
Ответить с цитированием
  #32 (permalink)  
Старый 23.12.2019, 08:13
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
но нет проверки "если друзей нет, берём следующего из основного массива"
Добавил такой поиск гостей... Думаю, что такой ответ лучше...

Сообщение от Marson
запутался в цикле
А что в нём сложного? Взять первого, и — пока есть гости, поместить очередного гостя за стол (или в массив), найти следующего подходящего гостя (даже если не друзья, чтобы все были усажены), конец цикла.
var persons = [
	{ name: 'Ali', close: ['Arno'] },
	{ name: 'San', close: ['Vasil', 'Zena'] },
	{ name: 'Vasil', close: ['San', 'Ali'] },
	{ name: 'Wog', close: ['Zena', 'Ali'] },
	{ name: 'Zena', close: ['Sun', 'Wog'] }
];

function placeGuests(guests) {
	const placedGuests = []
	const waitingGuest = person => person && !placedGuests.includes(person)
	const next = guest => Array.from(guest.close).sort()
		.map(name => guests.find(guest => guest.name === name))
		.find(waitingGuest) || guests.find(waitingGuest)
	for(let guest = guests[0]; guest != null; guest = next(guest)) {
		placedGuests.push(guest)
	}
	return placedGuests
}

console.log(placeGuests(persons));

Последний раз редактировалось Malleys, 23.12.2019 в 08:16.
Ответить с цитированием
  #33 (permalink)  
Старый 23.12.2019, 09:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Malleys,
ок
Ответить с цитированием
  #34 (permalink)  
Старый 01.01.2020, 14:24
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 65

function placeGuests (arr) {
 let result = [arr[0]];
 let currentUser = arr[0];
  
while(arr.length!==result.length){
  arr.forEach(el => el.close.sort((a,b) => 
     a > b ? 1 : -1
  ))
  let closeFilter = currentUser.close.filter(closeName => 
         !result.find(friend => 
         closeName === friend.name))

 let user = arr.find(el => el.name === closeFilter[0])
 currentUser = user
      result.push(user)
}     
  return result;
}
Я такой код написал) Всех с Новым годом!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как показать элементы под картой zava75 Элементы интерфейса 3 13.07.2018 18:48
Как вывести элементы по очереди каждый через несколько секунд? AsceticTr jQuery 3 27.05.2018 16:59
Как показывать/скрывать элементы с одинаковым div? Sice Javascript под браузер 6 13.11.2017 01:44
Как перерисовать все элементы SVG на Canvas (d3.js+leaflet.js+html2canvas) Trippal Общие вопросы Javascript 0 10.02.2016 18:25
Как выровнять элементы li в jquery ui tabs? 1Dmitry Элементы интерфейса 2 23.03.2013 14:58