繁体   English   中英

如何从另一个数组中的 pop 推送到一个数组?

[英]How can I push to one array from a pop in another?

我正在编写一个程序来模拟孩子的足球、棒球、棒球; 任何团队游戏。 10 个孩子在一个数组中。 每个孩子都有一个随机的幂数。 你知道你总是先挑选最好的孩子,然后依此类推。 所以我的脚本为孩子的力量生成了一个随机数。 然后对数组进行排序以确定两个最高孩子的力量并将它们放在数组的末尾并将它们弹出到两个名为 teamOne 和 teamTwo 的新数组中。 然后他们抛硬币看谁先选,这几乎是通过 if-else 循环和嵌套在 if 中的 while 循环。

我的排序有效,两名队长加入两个新队阵也是如此。 我的抛硬币成功了,但后来我不知所措。 所以我想为这个问题寻求一些指导或教学材料建议?

这是我的代码,谢谢。


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

// array of 10 kids
var Kids = [{
    name: "Bobby",
    random: getRandNum(1, 10)
  },
  {
    name: "Frankie",
    random: getRandNum(1, 10)
  },
  {
    name: "Juan",
    random: getRandNum(1, 10)
  },
  {
    name: "Sid",
    random: getRandNum(1, 10)
  },
  {
    name: "Ellie",
    random: getRandNum(1, 10)
  },
  {
    name: "Harry",
    random: getRandNum(1, 10)
  },
  {
    name: "Chester",
    random: getRandNum(1, 10)
  },
  {
    name: "Lucio",
    random: getRandNum(1, 10)
  },
  {
    name: "Nancy",
    random: getRandNum(1, 10)
  },
  {
    name: "Kim",
    random: getRandNum(1, 10)
  }
];

// sort based on random number with thanks to:
//  https://www.sitepoint.com/sort-an-array-of-objects-in-javascript

function compareValues(key, order = 'asc') {
  return function innerSort(a, b) {
    if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
      // property doesn't exist on either object
      return 0;
    }

    const varA = (typeof a[key] === 'string') ?
      a[key].toUpperCase() : a[key];
    const varB = (typeof b[key] === 'string') ?
      b[key].toUpperCase() : b[key];

    let comparison = 0;
    if (varA > varB) {
      comparison = 1;
    } else if (varA < varB) {
      comparison = -1;
    }
    return (
      (order === 'desc') ? (comparison * -1) : comparison
    );
  };
}

console.log(Kids.sort(compareValues('random', )));

const teamOne = Kids.pop();
const teamTwo = Kids.pop();

console.log(teamOne);
console.log(teamTwo);
console.log(Kids);

let coinToss = "Heads"

if (Math.floor((Math.random() * 2) + 1) == 2) {
  coinToss = "Tails";
};

console.log(coinToss);

if (coinToss = "Heads") {
  let x = 4;
  while (x > 0) {
    teamOne.push([Kids.pop()]);
    teamTwo.push([Kids.pop()]);
    x -= x;
  };
} else {
  let x = 4;
  while (x > 0) {
    teamTwo.push([Kids.pop()]);
    teamOne.push([Kids.pop()]);
    x -= x;
  };
  console.log("_____________");
  console.log(coinSide);
  console.log("_____________");
  console.log(teamOne.name);
  console.log("_____________");
  console.log(teamTwo.name);
};

问题是您没有将 teamOne 和 teamTwo 视为数组,因此您不能使用“push”。 最重要的是,Kids 数组对象有两个值——“name”和“random”——因此,使用“push”会添加一个新的孩子作为对象。

因此,首先,您需要将 teamOne 和 teamTwo 定义为数组而不是字符串。 其次,您需要从 Kids 对象中提取“名称”属性(假设您仅使用“随机”进行排序并且不再需要它的值)。 而且,最后,您还没有为每个团队分配一个名称,如果您为他们使用数组,您现在可以这样做。

尝试类似:

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

// array of 10 kids
var Kids = [{
    name: "Bobby",
    random: getRandNum(1, 10)
  },
  {
    name: "Frankie",
    random: getRandNum(1, 10)
  },
  {
    name: "Juan",
    random: getRandNum(1, 10)
  },
  {
    name: "Sid",
    random: getRandNum(1, 10)
  },
  {
    name: "Ellie",
    random: getRandNum(1, 10)
  },
  {
    name: "Harry",
    random: getRandNum(1, 10)
  },
  {
    name: "Chester",
    random: getRandNum(1, 10)
  },
  {
    name: "Lucio",
    random: getRandNum(1, 10)
  },
  {
    name: "Nancy",
    random: getRandNum(1, 10)
  },
  {
    name: "Kim",
    random: getRandNum(1, 10)
  }
];

// sort based on random number with thanks to:
//  https://www.sitepoint.com/sort-an-array-of-objects-in-javascript

function compareValues(key, order = 'asc') {
  return function innerSort(a, b) {
    if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
      // property doesn't exist on either object
      return 0;
    }

    const varA = (typeof a[key] === 'string') ?
      a[key].toUpperCase() : a[key];
    const varB = (typeof b[key] === 'string') ?
      b[key].toUpperCase() : b[key];

    let comparison = 0;
    if (varA > varB) {
      comparison = 1;
    } else if (varA < varB) {
      comparison = -1;
    }
    return (
      (order === 'desc') ? (comparison * -1) : comparison
    );
  };
}

console.log(Kids.sort(compareValues('random', )));

let teamOne = [];
let teamTwo = [];

let kidName1 = {};
let kidName2 = {};

kidName1 = Kids.pop();
teamOne[0] = kidName1.name;
kidName2 = Kids.pop();
teamTwo[0] = kidName2.name;
teamOne.name = "Team 1";
teamTwo.name = "Team 2";

console.log(teamOne);
console.log(teamTwo);
console.log(Kids);

let coinToss = "Heads"

if (Math.floor((Math.random() * 2) + 1) == 2) {
  coinToss = "Tails";
};

console.log(coinToss);

for (let i = 0; i < 4; i++) {
    kidName1 = Kids.pop();
    kidName2 = Kids.pop();
    if (coinToss == "Heads") {
        teamOne.push(kidName1.name);
        teamTwo.push(kidName2.name);
    } else {
        teamOne.push(kidName2.name);
        teamTwo.push(kidName1.name);
    }
};
console.log("_____________");
console.log(coinToss);
console.log("_____________");
console.log(teamOne.name);
console.log("_____________");
console.log(teamTwo.name);
console.log("_____________");
console.log(teamOne.toString());
console.log("_____________");
console.log(teamTwo.toString());

暂无
暂无

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

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