Показать сообщение отдельно
  #15 (permalink)  
Старый 17.12.2019, 17:10
Аспирант
Отправить личное сообщение для Marson Посмотреть профиль Найти все сообщения от Marson
 
Регистрация: 14.08.2018
Сообщений: 65

Помогите понять как дописать мой код, а то запутался в цикле. В целом нужно написать по этому алгоритму: 1) сортировка по алфавиту исходного массива
2) массив результатов с первым
3) цикл, который
берет у каждого close, копирует close, отфильтровывает тех, кто уже есть в массиве-результате
пушит того, кто остался в close если есть хоть кто-то.

Берем первого гост, сажаем
За столом один человек
Берем close
Ищем имя второго
Потом шерстим изначальный список по алфавиту
И сажаем второго
Берем его close...

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 result = [];
  let obj = arr[0]
  result.push(arr[0])
  
 arr.forEach((item, index, array) => {
  item.close.sort((a,b) => { 
    return a > b ? 1 : -1; 
  })
    })

for(var i=0; i<=arr.length; i++){
   for(let key in arr[i]){
     if(obj.close[0] === arr[i][key] || obj.close[1] === arr[i][key]){
       obj = arr[i]
       result.push(obj)
     }
}
} 
  return result;
 }

console.log(placeGuests(arr));


Я пока только к такому решению пришёл, только двоих получается усадить как надо за стол

Последний раз редактировалось Marson, 17.12.2019 в 17:14.
Ответить с цитированием