问题描述
我将数据存储在包含国家名称和首都的二维数组中。我想遍历数组,并显示每个国家的名称,以及其他国家(而不是当前国家)的首都(将以随机顺序排序)。在循环内部,使用函数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);
}
解决方法
这是您需要的吗?
- 环状国家
- 对于每个国家/地区,除当前国家/地区外,所有资本均会列为数组
- 随机播放结果
- 对国家/地区和首都进行任何操作,在我的示例中,仅是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
});
}