在循环内随机化二维数组

问题描述

我将数据存储在包含国家名称和首都的二维数组中。我想遍历数组,并显示每个国家的名称,以及其他国家(而不是当前国家)的首都(将以随机顺序排序)。在循环内部,使用函数shuffle()对国家的首都进行随机排序。但是此功能似乎导致显示重复的数组项(例如,一个国家(在下面的循环中,在arr[i][0]中,像Vietnam一样,错误地出现了两次):

var masterlist = [
  ["Indonesia","Jakarta"],["Malaysia","Kuala Lumpur"],["Philippines","Manila"],["Singapore","Singapore"],["Thailand","Bangkok"],["Vietnam","Hanoi"],["China","Beijing"],["Japan","Tokyo"],["South Korea","Seoul"],["Taiwan","Taipei"]
];

/* Randomize array in-place using Durstenfeld shuffle algorithm */
function shuffle(array) {
  for (var i = array.length - 1; i > 0; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  return array;
}

for (var i = 0; i < masterlist.length; i++) {
  //console.log("masterlist[i][0]",masterlist[i][0]);

  var arr = shuffle(masterlist); // create a shuffled copy of the array; ERROR here; the shuffle function inside this loop causes duplicate masterlist items
  //console.log(arr[i][0]);

  // save as new array the masterlist with the item's capital removed (ONLY to be used for choosing other nations' capitals in random order):
  var filteredArr = arr.filter(function(e) {
    return e !== arr[i]
  })

  console.log(arr[i][0],filteredArr); // ERROR here; should give unique country,then all other nations' capitals in random order

  var correctItem = arr[i];
  //console.log("correctItem",correctItem);

}

解决方法

这是您需要的吗?

  1. 环状国家
  2. 对于每个国家/地区,除当前国家/地区外,所有资本均会列为数组
  3. 随机播放结果
  4. 对国家/地区和首都进行任何操作,在我的示例中,仅是console.log

var masterlist = [
  ["Indonesia","Jakarta"],["Malaysia","Kuala Lumpur"],["Philippines","Manila"],["Singapore","Singapore"],["Thailand","Bangkok"],["Vietnam","Hanoi"],["China","Beijing"],["Japan","Tokyo"],["South Korea","Seoul"],["Taiwan","Taipei"]
];

/* Randomize array in-place using Durstenfeld shuffle algorithm */
function shuffle(array) {
  for (var i = array.length - 1; i > 0; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  return array;
}

for (var i = 0; i < masterlist.length; i++) {

  var country = masterlist[i][0];
  var countryArr = [];

  for (var j = 0; j < masterlist.length; j++) {
    if (i !== j) countryArr.push(masterlist[j][1]);
  }

  countryArr = shuffle(countryArr);

  console.log({
    [country]: countryArr
  });
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...