簡體   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