繁体   English   中英

如何用变量替换数组名称?

[英]How do I substitute a variable for an Array name?

我在这里编写了 JavaScript 来模拟足球比赛中的比赛。 我创建了一个包含 5 个对象的数组,其中每个对象都是一个玩家。 然后我继续遍历数组并使用 if 条件返回一些比较点,基于哪些球员是活跃的,这样我最终可以比较对手的比较点,看看差异是否保证得分目标,或选择六。

代码的后半部分即将到来,但我首先要建立的是下面的代码能够通过在所有情况下用一个名为“whoHasBall”的变量替换团队名称来工作。

这样我就可以使用相同的循环来指向 Eagles 数组或 Giants 数组,我稍后会添加。

下面我粘贴了代码,其中我将团队名称输入为静态名称,此代码通过返回两个活跃玩家并返回比较点总数来工作。

/*-----------EaglesVsGiants5.js------------ */

let whoHasBall = "Eagles";

let getRandNum = function (start, range) {
    let getRand = Math.floor((Math.random() * range) + start);
    while (getRand > range) {
        getRand = Math.floor((Math.random() * range) + start);
    };
    return getRand;
}

let Eagles = [{
        name: "Wentz",
        power: 99,
        position: "QB",
        random: getRandNum(1, 10)
    },
    {
        name: "Jackson",
        power: 85,
        position: "WR",
        random: getRandNum(1, 10)
    },
    {
        name: "Shady",
        power: 88,
        position: "RB",
        random: getRandNum(1, 10)
    },
    {
        name: "Cox",
        power: 99,
        position: "DT",
        random: getRandNum(1, 10)
    },
    {
        name: "Jenkins",
        power: 80,
        position: "DB",
        random: getRandNum(1, 10)
    },
];


let TeamComparisonPts = 0;

for (let x = 0; x < Eagles.length; x++) {

    let pow = (Eagles[x].power);

 
    function AdjPlayerPts(rand) {
        return Math.round(pow / (rand * (getRandNum(1, 10))));
    };

    let PlayersPts = (AdjPlayerPts(Eagles[x].random));

   
    if ((Eagles[x].position) === "QB" || (Eagles[x].position) === "WR") {
        console.log("------------------");
        console.log((Eagles[x].name) + " is active on this play and has");
        console.log((PlayersPts) + " pts");
        TeamComparisonPts += PlayersPts;
    };
};

console.log("------------------");
console.log(whoHasBall + " have " + TeamComparisonPts + " Team Comparison Points on this play");
console.log("------------------");

因此,我决定采取下一步行动,替换 Team 数组名称“Eagles”的所有实例,当然,除了变量声明和我将使用变量“whoHasBall”引用的实际数组名称之外,代码崩溃了. 我在全局级别声明了变量,因为我的理解是函数可以超出其本地范围。 顺便说一句,在第一个粘贴的代码中,变量“whoHasBall”仅在底部控制台调用中被引用以调整字符串

我已将代码粘贴到此处:

let whoHasBall = "Eagles";

let getRandNum = function (start, range) {
    let getRand = Math.floor((Math.random() * range) + start);
    while (getRand > range) {
        getRand = Math.floor((Math.random() * range) + start);
    };
    return getRand;
}

let Eagles = [{
        name: "Wentz",
        power: 99,
        position: "QB",
        random: getRandNum(1, 10)
    },
    {
        name: "Jackson",
        power: 85,
        position: "WR",
        random: getRandNum(1, 10)
    },
    {
        name: "Shady",
        power: 88,
        position: "RB",
        random: getRandNum(1, 10)
    },
    {
        name: "Cox",
        power: 99,
        position: "DT",
        random: getRandNum(1, 10)
    },
    {
        name: "Jenkins",
        power: 80,
        position: "DB",
        random: getRandNum(1, 10)
    },
];


let TeamComparisonPts = 0;

for (let x = 0; x < whoHasBall.length; x++) {

    let pow = (whoHasBall[x].power);

 
    function AdjPlayerPts(rand) {
        return Math.round(pow / (rand * (getRandNum(1, 10))));
    };

    let PlayersPts = (AdjPlayerPts(whoHasBall[x].random));

   
    if ((whoHasBall[x].position) === "QB" || (whoHasBall[x].position) === "WR") {
        console.log("------------------");
        console.log((whoHasBall[x].name) + " is active on this play and has");
        console.log((PlayersPts) + " pts");
        TeamComparisonPts += PlayersPts;
    };
};

console.log("------------------");
console.log(whoHasBall + " have " + TeamComparisonPts + " Team Comparison Points on this play");
console.log("------------------");

我希望,这对你有用!!!

 let getRandNum = function(start, range) { let getRand = Math.floor((Math.random() * range) + start); while (getRand > range) { getRand = Math.floor((Math.random() * range) + start); }; return getRand; } let whoHasBall = { Eagles: [{ name: "Wentz", power: 99, position: "QB", random: getRandNum(1, 10) }, { name: "Jackson", power: 85, position: "WR", random: getRandNum(1, 10) }, { name: "Shady", power: 88, position: "RB", random: getRandNum(1, 10) }, { name: "Cox", power: 99, position: "DT", random: getRandNum(1, 10) }, { name: "Jenkins", power: 80, position: "DB", random: getRandNum(1, 10) }, ] }; let TeamComparisonPts = 0; Object.keys(whoHasBall).map(team => { whoHasBall[team].map(player => { let pow = (player.power); function AdjPlayerPts(rand) { return Math.round(pow / (rand * (getRandNum(1, 10)))); }; let PlayersPts = (AdjPlayerPts(player.random)); if ((player.position) === "QB" || (player.position) === "WR") { console.log("------------------"); console.log((player.name) + " is active on this play and has"); console.log((PlayersPts) + " pts"); TeamComparisonPts += PlayersPts; } }) console.log("------------------"); console.log(team + " have " + TeamComparisonPts + " Team Comparison Points on this play"); console.log("------------------"); })

我已经意识到我在这里做错了什么并修复了我的代码。 我已将其粘贴在下面,但这基本上是我需要做的。

在第一行代码:

let whoHasBall = "Eagles";

我不得不:

  1. 删除引号。 在进一步阅读时,我发现这只是将原始数组 Eagles 的引用传递给一个名为 whoHasBall 的新变量,然后它就变成了同一个数组。

  2. 我必须将代码行移到 Eagles 数组下方,以便首先初始化 Eagles 数组。

这解决了这个特殊问题。

完整更正的代码在这里:



let getRandNum = function (start, range) {
    let getRand = Math.floor((Math.random() * range) + start);
    while (getRand > range) {
        getRand = Math.floor((Math.random() * range) + start);
    };
    return getRand;
}

let Eagles = [{
        name: "Wentz",
        power: 99,
        position: "QB",
        random: getRandNum(1, 10)
    },
    {
        name: "Jackson",
        power: 85,
        position: "WR",
        random: getRandNum(1, 10)
    },
    {
        name: "Shady",
        power: 88,
        position: "RB",
        random: getRandNum(1, 10)
    },
    {
        name: "Cox",
        power: 99,
        position: "DT",
        random: getRandNum(1, 10)
    },
    {
        name: "Jenkins",
        power: 80,
        position: "DB",
        random: getRandNum(1, 10)
    },
];

let whoHasBall = Eagles;

let TeamComparisonPts = 0;

for (let x = 0; x < whoHasBall.length; x++) {

    let pow = (whoHasBall[x].power);

 
    function AdjPlayerPts(rand) {
        return Math.round(pow / (rand * (getRandNum(1, 10))));
    };

    let PlayersPts = (AdjPlayerPts(whoHasBall[x].random));

   
    if ((whoHasBall[x].position) === "QB" || (whoHasBall[x].position) === "WR") {
        console.log("------------------");
        console.log((whoHasBall[x].name) + " is active on this play and has");
        console.log((PlayersPts) + " pts");
        TeamComparisonPts += PlayersPts;
    };
};

console.log("------------------");
console.log(whoHasBall + " have " + TeamComparisonPts + " Team Comparison Points on this play");
console.log("------------------");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM