Javascript 将随机对象推送到阵列上

Javascript 将随机对象推送到阵列上,javascript,arrays,object,Javascript,Arrays,Object,我需要在阵列上随机设置对象以“进行战斗”。“随机”效果完美,但有时会重复对象。此外,我可以看到我的var-ARR,它充满了未定义的内容。我不明白我需要怎么做才能完全随机,没有重复的对象,用随机的对象填充 var avenger = [ {id: 1, fullName: "Steve Rogers", avengerName: "Captain America", gender: "Male", city: "New York City", markAv: 10},

我需要在阵列上随机设置对象以“进行战斗”。“随机”效果完美,但有时会重复对象。此外,我可以看到我的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);
var复仇者=[
{id:1,全名:“史蒂夫·罗杰斯”,复仇者姓名:“美国队长”,性别:“男性”,城市:“纽约市”,markAv:10},
{id:2,全名:“托尼·斯塔克”,复仇者姓名:“铁人”,性别:“男性”,城市:“纽约市”,markAv:15},
{id:3,全名:“Thor Odinson”,复仇者姓名:“Thor”,性别:“男”,城市:“洛杉矶”,markAv:13},
{id:4,全名:“布鲁斯·班纳”,复仇者姓名:“绿巨人”,性别:“男性”,城市:“马里兰州”,马尔卡夫:20},
{身份证号码:5,全名:“克林特·巴顿”,复仇者姓名:“鹰眼”,性别:“男性”,城市:“洛杉矶”,markAv:8},
{id:6,全名:“娜塔莎·罗曼诺夫”,复仇者姓名:“黑寡妇”,性别:“女性”,城市:“巴黎”,马尔卡夫:14},
{id:7,全名:“尼克·弗瑞”,复仇者姓名:“尼克·弗瑞”,性别:“女性”,城市:“纽约市”,markAv:5},
{id:8,全名:“Jaume Serradell”,复仇者姓名:“Jaumeserr”,性别:“男”,城市:“巴塞罗那”,markAv:18}
]
函数对(myObject){
var-arr=[];

对于(var i=0;i,因此我认为问题在于
arr.push([random[i],random[i+1])

如果您查看
console.log(random)
输出,就会发现
random
表示单个复仇者的对象(即
{id:4,全名:'Bruce Banner',复仇者姓名:'Hulk',性别:'Male',城市:'Maryland',markAv:20}

这意味着
random[i]
random[i+1]
都是未定义的

我的建议是做
arr.push([random,avenger[i+1]]);

您还可以使用在配对时删除每个复仇者,这样就不会有重复

好的,几个小时后,我开始使用拼接/无重复。如果你想继续,我留下了一堆注释掉的console.log语句

var复仇者=[
{id:1,全名:“史蒂夫·罗杰斯”,复仇者姓名:“美国队长”,性别:“男性”,城市:“纽约市”,markAv:10},
{id:2,全名:“托尼·斯塔克”,复仇者姓名:“铁人”,性别:“男性”,城市:“纽约市”,markAv:15},
{id:3,全名:“Thor Odinson”,复仇者姓名:“Thor”,性别:“男”,城市:“洛杉矶”,markAv:13},
{id:4,全名:“布鲁斯·班纳”,复仇者姓名:“绿巨人”,性别:“男性”,城市:“马里兰州”,马尔卡夫:20},
{身份证号码:5,全名:“克林特·巴顿”,复仇者姓名:“鹰眼”,性别:“男性”,城市:“洛杉矶”,markAv:8},
{id:6,全名:“娜塔莎·罗曼诺夫”,复仇者姓名:“黑寡妇”,性别:“女性”,城市:“巴黎”,马尔卡夫:14},
{id:7,全名:“尼克·弗瑞”,复仇者姓名:“尼克·弗瑞”,性别:“女性”,城市:“纽约市”,markAv:5},
{id:8,全名:“Jaume Serradell”,复仇者姓名:“Jaumeserr”,性别:“男”,城市:“巴塞罗那”,markAv:18}
]
函数对(myObject){
var-arr=[];
var lengthSave=复仇者长度
对于(变量i=0;i 1){
另一对=复仇者剪接(索引,1)[0]
}else if(avenger.length==1){
另一对=复仇者拼接(0,1)[0]
} 
//console.log(!!另一对)
//console.log(另一对)
//console.log(“另一对”)
如果(!!另一对===真){
对推(另一对)
}
}
//console.log(pairar)
//console.log(!!pairar[0])
//console.log(!!pairar[1])
//console.log('pairar')
如果(!!pairar[0]==true&&!!pairar[1]){
arr.push(pairar)
}
}
//控制台日志(arr);

对于(var i=0;i,因此我认为问题在于
arr.push([random[i],random[i+1])

如果您查看
console.log(random)
输出,就会发现
random
表示单个复仇者的对象(即
{id:4,全名:'Bruce Banner',复仇者姓名:'Hulk',性别:'Male',城市:'Maryland',markAv:20}

这意味着
random[i]
random[i+1]
都是未定义的

我的建议是做
arr.push([random,avenger[i+1]]);

您还可以使用在配对时删除每个复仇者,这样就不会有重复

好的,几个小时后,我开始使用拼接/无重复。如果你想继续,我留下了一堆注释掉的console.log语句

var复仇者=[
{id:1,全名:“史蒂夫·罗杰斯”,复仇者姓名:“美国队长”,性别:“男性”,城市:“纽约市”,markAv:10},
{id:2,全名:“托尼·斯塔克”,复仇者姓名:“铁人”,性别:“男性”,城市:“纽约市”,markAv:15},
{id:3,全名:“Thor Odinson”,复仇者姓名:“Thor”,性别:“男”,城市:“洛杉矶”,markAv:13},
{id:4,全名:“布鲁斯·班纳”,复仇者姓名:“绿巨人”,性别:“男性”,城市:“马里兰州”,马尔卡夫:20},
{身份证号码:5,全名:“克林特·巴顿”,复仇者姓名:“鹰眼”,性别:“男性”,城市:“洛杉矶”,markAv:8},
{id:6,全名:“娜塔莎·罗曼诺夫”,复仇者姓名:“黑寡妇”,性别:“女性”,城市:“巴黎”,马尔卡夫:14},
{id:7,全名:“尼克·弗瑞”,复仇者姓名:“尼克·弗瑞”,性别:“女性”,城市:“纽约市”,markAv:5},
{id:8,全名:“Jaume Serradell”,复仇者姓名:“Jaumeserr”,性别:“男”,城市:“巴塞罗那”,markAv:18}
]
函数对(myObject){
var-arr=[];
var lengthSave=复仇者长度
对于(变量i=0;i 1){
另一对=复仇者。
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++;
}
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);