Эффективный способ создания вложенных объектов JavaScript - PullRequest
0 голосов
/ 25 октября 2018

Есть ли более эффективные способы создания вложенных объектов, чем подход с вложенным for?

Я пытаюсь удержать 25 случайных чисел (1 - 71), 5 строк x 5колонка.Я буду перебирать каждый элемент, чтобы проверить, выбрала ли функция ballPicker () (еще не реализованная) число, имеющееся у объекта.Поэтому мне нужно сохранить информацию, если номер был найден.Я мог бы сделать это с массивом 5 x 5, но итерация этого массива будет не такой эффективной, как у объектов.

У меня есть массив, начиная с 1 до 71 (включительно, шаг равен 1).Я перемешиваю массив в функции createRandomNumberArray ().Таким образом, значения массива shuffledNumbers не являются последовательными

let shuffledNumbers = Array.from({length: 71}, (v, i) => i + 1);

function createRandomNumberArray() {     //Fisher - Yates shuffle algorithm
    let randomPosition;
    let temp;
    for (let i = shuffledNumbers.length - 1; i > 0; i--) {
        randomPosition = Math.floor(Math.random() * (i + 1));
        temp = shuffledNumbers[i];
        shuffledNumbers[i] = shuffledNumbers[randomPosition];
        shuffledNumbers[randomPosition] = temp;
    }
}

В функции createBoards () я создаю объект (доску), который содержит 5 объектов (ряд) с их индексами в качестве имени свойства.И в строке снова есть 5 объектов (ячейка) с индексами в качестве имени свойства.В ячейке есть только один объект, который получает имя своего свойства из slicedArray (slicedArray - это срез из 5 элементов из shuffledNumbers, который содержит недублированные случайные числа (диапазон от 1 до 71 включительно)), и его значение всегда равно false.

function createBoards() {
    let board = {};
    for (let i = 0; i < 5; i++) {
        let row = {};
        let slicedArray = shuffledNumbers.slice((i * 5), ((i + 1) * 5));
        for (let j = 0; j < 5; j++) {
            let cell = {};
            cell[slicedArray[j]] = false;
            row[j] = cell;
        }
        board[i] = row;
    }
    return board;
}

Я хочу сохранить структуру следующим образом:

The structure that I am getting with my code (using WebStorm)

В объекте Board будет ровно 5 строк, а в 1 строке ровно 5 элементов.И в будущем мне нужно будет повторять эти элементы, чтобы найти случайное значение, которое я назначил ранее.Я думал, что быстрее использовать объекты, чем массивы.Я надеюсь, что я прав.

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