簡體   English   中英

將隨機對象推入數組

[英]Push randomed objects on array

我需要在數組上隨機放置對象以進行“戰斗”。 隨機效果完美,但有時會重復對象。 另外,我可以看到我的var 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);

由於以下幾行,您的數組被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成功看到它。

這是給您帶來麻煩的下一行。 在推入調用中,您嘗試使用random[i]random[i + 1]訪問random變量上的兩個索引。 這將返回undefined,因為您的random變量不是復仇者數組而是一個復仇者 ,並且該對象上不存在整數鍵,因此返回undefined

我會為您的random變量推薦一個更好的名稱。 也許randomAvenger 這將有助於弄清楚您是錯誤地索引了一個復仇者,而不是復仇者數組。

為了成功地將兩個復仇者配對,您將需要兩個單獨的隨機索引到avengers數組中。 您還需要提防兩次選擇相同的復仇者!

所以我認為問題出在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); 

隨機工作完美,但我不能使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM