Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужна помощь в создании двумерного массива через завыкание (https://javascript.ru/forum/misc/73366-nuzhna-pomoshh-v-sozdanii-dvumernogo-massiva-cherez-zavykanie.html)

JStudent 10.04.2018 13:22

Нужна помощь в создании двумерного массива через завыкание
 
Вcем привет.

Прошу помочь плз в решении задачки.

Есть функция которая рандомно перемешивает элементы массива,
Нужно написать функцию которая создаёт через цикл двумерный массив из многократных вазовов
getShuffle(arr).

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

        function getShuffle(param) {
            return param.sort(function (a, b) {
                return Math.floor(Math.random() - 0.5);

            })

        };

function makeMultiArr() {
            var pusher = [];
            for (var i = 0; i < 5; i++) {
                var p = function () {
                return getShuffle(arr);
                };
                pusher.push(p())
            };
            return pusher;
        }

        console.log(makeMultiArr());


Понимаю что нужно делать через замыкание но не получается.
Нужен хелп.

Nexus 10.04.2018 13:28

15-ю строку замените этим:
return getShuffle(arr.slice());

JStudent 10.04.2018 14:00

Большое спасибо:thanks:
Только я не понял как это работает.
буду разбираться.

рони 10.04.2018 16:43

:)
<script>
  "use strict"
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];

function shuffleArray() {
    let array = this.slice(0);
    for (let i = array.length - 1; i > 0; i--) {
        let j = Math.random() * i|0;
        [array[i], array[j]] = [array[j], array[i]];
    }
    return array;
}
function makeMultiArr(num, arr) {
            return Array.from({length : num},  shuffleArray, arr)
        }

document.write(JSON.stringify(makeMultiArr(5, arr)))

  </script>

JStudent 11.04.2018 08:08

Понял в чём был косяк arr постоянно перетирался

рони 11.04.2018 08:18

Цитата:

Сообщение от JStudent
Понял в чём был косяк arr постоянно перетирался

Объекты: передача по ссылке

slice создаёт новый обьект


Часовой пояс GMT +3, время: 04:33.