Нарезает JSON массив и случайным образом соединяет 2 пары данных - ЛЕГКО или сложно? - PullRequest
0 голосов
/ 07 августа 2020

У меня есть пример json файла с n / неограниченным количеством пользователей

[{
    "fname": "Hubert",
    "lname": "Maier",
    "email": "h@m.com"},
    {
        "fname": "Hubert1",...........

теперь я хочу соединить пользователей случайным образом в пары, чтобы каждый пользователь получил другого пользователя в качестве партнера по паре. затем распечатайте пары в консоли

ограничено для меня: не может быть соединено с самим собой, и если нечетное число распечатайте пользователя, который не нашел совпадения.

какой метод будет лучшим? Я попытался придумать решение i javascript, после большого количества игр ничего хорошего не произошло :)

по крайней мере мне удалось прочитать внешний json файл:)

let readJSON = function (file) {
    let json = {}
    $.ajax({
      async: false,
      global: false,
      url: file,
      dataType: 'json',
      success: function (data) {
        json = data
      }
    })
    return json
  }
  
  let x= readJSON('data.json')
  console.table(x)

1 Ответ

1 голос
/ 07 августа 2020

Вы можете попробовать ниже. (несоответствующий элемент будет добавлен как последний элемент)

// return next() function which will return random element
const getRandom = array => {
    const data = [...array];
    return () => {
        const length = data.length;
        const randomIndex = Math.ceil((Math.random()) * length) - 1;
        return data.splice(randomIndex,1)[0];
    }
}
// shuffle array using next() function
const shuffle = array => {
    const next = getRandom(array);
    return array.map(() => next());
}
// use Array.reduce to subgroup array
const subgroup = (array, numberInSubArray) => {
    return array.reduce((acc, element) => {
        const lastGroup = acc[acc.length - 1]
        lastGroup.length === numberInSubArray ?
        acc.push([element]) :
        lastGroup.push(element);
        return acc;
    },[[]])
}


const persons = ['a','b','c','d','e','f','g','h','x'];
const shuffled = shuffle(persons);
console.log(subgroup(shuffled,2))
// [ [ 'd', 'h' ], [ 'a', 'f' ], [ 'b', 'g' ], [ 'c', 'x' ], [ 'e' ] ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...