Выдвиньте случайные объекты в массив - PullRequest
0 голосов
/ 26 апреля 2018

Мне нужно случайные объекты в массиве, чтобы "сделать битву".Случайное работает отлично, но иногда повторять объекты.Кроме того, я вижу, что моя переменная ARR полна неопределенных.Я не понимаю, как мне нужно сделать, чтобы совершенно случайно, без повторяющихся объектов и заполнить случайными объектами.

var avenger = [
        {id: 1, fullName: "Steve Rogers", avengerName: "Captain America", gender: "Male", city: "New York City", markAv: 10},
        {id: 2, fullName: "Tony Stark", avengerName: "IronMan", gender: "Male", city: "New York City", markAv: 15},
        {id: 3, fullName: "Thor Odinson", avengerName: "Thor", gender: "Male", city: "Los Angeles", markAv: 13},
        {id: 4, fullName: "Bruce Banner", avengerName: "Hulk", gender: "Male", city: "Maryland", markAv: 20},
        {id: 5, fullName: "Clint Barton", avengerName: "Hawkeye", gender: "Male", city: "Los Angeles", markAv: 8},
        {id: 6, fullName: "Natasha Romanoff", avengerName: "Black Widow", gender: "Female", city: "Paris", markAv: 14},
        {id: 7, fullName: "Nick Fury", avengerName: "Nick Fury", gender: "Female", city: "New York City", markAv: 5},
        {id: 8, fullName: "Jaume Serradell", avengerName: "Jaumeserr", gender: "Male", city: "Barcelona", markAv: 18}
    ]

    function avengerPairs(myObject) {

        var arr = [];

        for (var i=0; i<avenger.length; i++) {

            var randomAvenger = avenger[Math.floor(Math.random() * avenger.length)];

            if (randomAvenger[i] !== avenger[i]) {
                arr.push([randomAvenger, avenger[i+1]]);
                i++;    
            }
        }

        console.log(arr);

        for (var i=0; i<arr.length; i++) {

            console.log(Math.max(arr[i][0].markAv, arr[i][1].markAv));

            if (arr[i][0].markAv < arr[i][1].markAv) {
                console.log(arr[i][0].fullName + " vs " + arr[i][1].fullName + " => " + arr[i][1].fullName + " is better!");
            } else if (arr[i][0].markAv === arr[i][1].markAv) {
                console.log(arr[i][0].fullName + " vs " + arr[i][1].fullName + " => Are equals!");
            } else {
                console.log(arr[i][0].fullName + " vs " + arr[i][1].fullName + " => " + arr[i][0].fullName + " is better!");
            }
        }
    }

avengerPairs(avenger);

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Ваш массив заполняется undefined из-за этих строк:

var arr = [];

for (var i=0; i<avenger.length; i++) {

    var random = avenger[Math.floor(Math.random() * avenger.length)];

    console.log(random);
    arr.push([random[i], random[i+1]]);
    i++;
}

random успешно создает случайный индекс для просмотра массива avenger и назначает соответствующее значение в массивек переменной random.

Вы должны увидеть это успешно в следующем console.log.

Следующая строка доставит вам неприятности.Внутри вашего push-вызова вы пытаетесь получить доступ к двум индексам переменной random с помощью random[i] и random[i + 1].Это возвращает неопределенное значение, потому что ваша переменная random - это не массив мстителей, а один мститель , а целочисленные ключи не существуют для этого объекта, возвращая, таким образом, undefined.

* 1021.* Я бы порекомендовал лучшее имя для вашей random переменной.Возможно randomAvenger?Это поможет вам понять, что вы неправильно индексируете в мстителя, а не в массиве мстителей.

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

0 голосов
/ 26 апреля 2018

Случайно работает отлично, но я не могу случайного мстителя с randomAvenger, чтобы предотвратить повторные значения.Теперь между двумя значениями в объектах в массиве [a, b] [a, b] все идеально, но между значениями в объектах продолжается повторение значений.

Это мой код, новый код:

var avenger = [
        {id: 1, fullName: "Steve Rogers", avengerName: "Captain America", gender: "Male", city: "New York City", markAv: 10},
        {id: 2, fullName: "Tony Stark", avengerName: "IronMan", gender: "Male", city: "New York City", markAv: 15},
        {id: 3, fullName: "Thor Odinson", avengerName: "Thor", gender: "Male", city: "Los Angeles", markAv: 13},
        {id: 4, fullName: "Bruce Banner", avengerName: "Hulk", gender: "Male", city: "Maryland", markAv: 20},
        {id: 5, fullName: "Clint Barton", avengerName: "Hawkeye", gender: "Male", city: "Los Angeles", markAv: 8},
        {id: 6, fullName: "Natasha Romanoff", avengerName: "Black Widow", gender: "Female", city: "Paris", markAv: 14},
        {id: 7, fullName: "Nick Fury", avengerName: "Nick Fury", gender: "Female", city: "New York City", markAv: 5},
        {id: 8, fullName: "Jaume Serradell", avengerName: "Jaumeserr", gender: "Male", city: "Barcelona", markAv: 18}
    ]

    function avengerPairs(myObject) {

        var arr = [];

        for (var i=0; i<avenger.length; i++) {

            var randomAvenger = avenger[Math.floor(Math.random() * avenger.length)];


            if (randomAvenger !== avenger[i]) {
                arr.push([randomAvenger, avenger[i+1]]);
                i++;    
            } else {
                console.log("Not equals");
            }   
        }

        console.log(arr);

        /*
        for (var i=0; i<arr.length; i++) {

            console.log(Math.max(arr[i][0].markAv, arr[i][1].markAv));

            if (arr[i][0].markAv < arr[i][1].markAv) {
                console.log(arr[i][0].fullName + " vs " + arr[i][1].fullName + " => " + arr[i][1].fullName + " is better!");
            } else if (arr[i][0].markAv === arr[i][1].markAv) {
                console.log(arr[i][0].fullName + " vs " + arr[i][1].fullName + " => Are equals!");
            } else {
                console.log(arr[i][0].fullName + " vs " + arr[i][1].fullName + " => " + arr[i][0].fullName + " is better!");
            }
        }
        */
    }

avengerPairs(avenger);
0 голосов
/ 26 апреля 2018

Так что я считаю, что проблема в arr.push([random[i], random[i+1]]).

Если вы посмотрите на вывод console.log(random), вы поймете, что random представляет Объект одного мстителя (то есть { id: 4, fullName: 'Bruce Banner', avengerName: 'Hulk', gender: 'Male', city: 'Maryland',markAv: 20 }).

Это означает, что random[i] и random[i+1] оба не определены.

Я предлагаю сделать arr.push([random, avenger[i+1]]);.

Вы также можете использовать Array.prototype.splice для удаления каждого мстителя, когда вы их объединяете, чтобы не было дубликатов.

Хорошо, через несколько часов, и я пошел дальшеи получил его для работы со сращиванием / без повторов.Я оставил в закомментированных заявлениях console.log, если вы хотите следовать.

var avenger = [
        {id: 1, fullName: "Steve Rogers", avengerName: "Captain America", gender: "Male", city: "New York City", markAv: 10},
        {id: 2, fullName: "Tony Stark", avengerName: "IronMan", gender: "Male", city: "New York City", markAv: 15},
        {id: 3, fullName: "Thor Odinson", avengerName: "Thor", gender: "Male", city: "Los Angeles", markAv: 13},
        {id: 4, fullName: "Bruce Banner", avengerName: "Hulk", gender: "Male", city: "Maryland", markAv: 20},
        {id: 5, fullName: "Clint Barton", avengerName: "Hawkeye", gender: "Male", city: "Los Angeles", markAv: 8},
        {id: 6, fullName: "Natasha Romanoff", avengerName: "Black Widow", gender: "Female", city: "Paris", markAv: 14},
        {id: 7, fullName: "Nick Fury", avengerName: "Nick Fury", gender: "Female", city: "New York City", markAv: 5},
        {id: 8, fullName: "Jaume Serradell", avengerName: "Jaumeserr", gender: "Male", city: "Barcelona", markAv: 18}
    ]

    function avengerPairs(myObject) {

        var arr = [];
        var lengthSave = avenger.length

        for (var i=0; i<lengthSave; i++) {
            var newLength = avenger.length
            var index = Math.floor(Math.random() * newLength)
            var randomAvenger = avenger[index];
            var pairArr = (avenger.splice(index, 2)) 

            // console.log(avenger.length)
            // console.log(pairArr.length)

            if (pairArr.length < 2 ) {
                var anotherPair
                if (avenger.length > 1) {
                    anotherPair = avenger.splice(index, 1)[0]
                } else if (avenger.length === 1) {
                   anotherPair = avenger.splice(0, 1)[0]
                } 
                // console.log(!!anotherPair)
                // console.log(anotherPair)
                // console.log('another pair')

                if (!!anotherPair === true) {
                    pairArr.push(anotherPair)
                }
            }

            // console.log(pairArr)
            // console.log(!!pairArr[0])
            // console.log(!!pairArr[1])

            // console.log('pairArr')

            if (!!pairArr[0] === true && !!pairArr[1]) {
                arr.push(pairArr)   
            }


        }

        // console.log(arr);

        for (var i=0; i<arr.length; i++) {

            // console.log(Math.max(arr[i][0].markAv, arr[i][1].markAv));

            if (arr[i][0].markAv < arr[i][1].markAv) {
                console.log(arr[i][0].fullName + " vs " + arr[i][1].fullName + " => " + arr[i][1].fullName + " is better!");
            } else if (arr[i][0].markAv === arr[i][1].markAv) {
                console.log(arr[i][0].fullName + " vs " + arr[i][1].fullName + " => Are equals!");
            } else {
                console.log(arr[i][0].fullName + " vs " + arr[i][1].fullName + " => " + arr[i][0].fullName + " is better!");
            }
        }
    }

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